实例介绍
LibrePhotos是一个自托管的开源照片管理服务,支持各种类型的照片包括原始照片和视频。其特性包括时间线视图、文件系统图片扫描、多用户支持以及基于事件生成相册等功能。此外,LibrePhotos还具有面部识别、反向地理编码、对象/场景检测、语义图像搜索等功能。
LibrePhotos使用了各种工具来实现其功能,包括ImageMagick进行图像转换、FFmpeg进行视频转换、ExifTool对Exif元数据的支持,以及其他工具进行面部识别、图像描述等功能。
【实例截图】【核心代码】
文件清单
└── librephotos-4d8347c3bcc26c53f56eabc1f56b540945f2c056
├── api
│ ├── admin.py
│ ├── all_tasks.py
│ ├── api_util.py
│ ├── apps.py
│ ├── autoalbum.py
│ ├── background_tasks.py
│ ├── batch_jobs.py
│ ├── cluster_manager.py
│ ├── date_time_extractor.py
│ ├── directory_watcher.py
│ ├── drf_optimize.py
│ ├── exif_tags.py
│ ├── face_classify.py
│ ├── face_extractor.py
│ ├── face_recognition.py
│ ├── filters.py
│ ├── geocode
│ │ ├── config.py
│ │ ├── geocode.py
│ │ ├── __init__.py
│ │ └── parsers
│ │ ├── __init__.py
│ │ ├── mapbox.py
│ │ ├── nominatim.py
│ │ ├── opencage.py
│ │ ├── photon.py
│ │ └── tomtom.py
│ ├── image_captioning.py
│ ├── image_similarity.py
│ ├── __init__.py
│ ├── llm.py
│ ├── management
│ │ ├── commands
│ │ │ ├── build_similarity_index.py
│ │ │ ├── clear_cache.py
│ │ │ ├── createadmin.py
│ │ │ ├── createuser.py
│ │ │ ├── save_metadata.py
│ │ │ ├── scan.py
│ │ │ └── start_service.py
│ │ └── __init__.py
│ ├── middleware.py
│ ├── migrations
│ │ ├── 0001_initial.py
│ │ ├── 0002_add_confidence.py
│ │ ├── 0003_remove_unused_thumbs.py
│ │ ├── 0004_fix_album_thing_constraint.py
│ │ ├── 0005_add_video_to_photo.py
│ │ ├── 0006_migrate_to_boolean_field.py
│ │ ├── 0007_migrate_to_json_field.py
│ │ ├── 0008_remove_image_path.py
│ │ ├── 0009_add_aspect_ratio.py
│ │ ├── 0009_add_clip_embedding_field.py
│ │ ├── 0010_merge_20210725_1547.py
│ │ ├── 0011_a_add_rating.py
│ │ ├── 0011_b_migrate_favorited_to_rating.py
│ │ ├── 0011_c_remove_favorited.py
│ │ ├── 0012_add_favorite_min_rating.py
│ │ ├── 0013_add_image_scale_and_misc.py
│ │ ├── 0014_add_save_metadata_to_disk.py
│ │ ├── 0015_add_dominant_color.py
│ │ ├── 0016_add_transcode_videos.py
│ │ ├── 0017_add_cover_photo.py
│ │ ├── 0018_user_config_datetime_rules.py
│ │ ├── 0019_change_config_datetime_rules.py
│ │ ├── 0020_add_default_timezone.py
│ │ ├── 0021_remove_photo_image.py
│ │ ├── 0022_photo_video_length.py
│ │ ├── 0023_photo_deleted.py
│ │ ├── 0024_photo_timestamp.py
│ │ ├── 0025_add_cover_photo.py
│ │ ├── 0026_add_cluster_info.py
│ │ ├── 0027_rename_unknown_person.py
│ │ ├── 0028_add_metadata_fields.py
│ │ ├── 0029_change_to_text_field.py
│ │ ├── 0030_user_confidence_person.py
│ │ ├── 0031_remove_account.py
│ │ ├── 0032_always_have_owner.py
│ │ ├── 0033_add_post_delete_person.py
│ │ ├── 0034_allow_deleting_person.py
│ │ ├── 0035_add_files_model.py
│ │ ├── 0036_handle_missing_files.py
│ │ ├── 0037_migrate_to_files.py
│ │ ├── 0038_add_main_file.py
│ │ ├── 0039_remove_photo_image_paths.py
│ │ ├── 0040_add_user_public_sharing_flag.py
│ │ ├── 0041_apply_user_enum_for_person.py
│ │ ├── 0042_alter_albumuser_cover_photo_alter_photo_main_file.py
│ │ ├── 0043_alter_photo_size.py
│ │ ├── 0044_alter_cluster_person_alter_person_cluster_owner.py
│ │ ├── 0045_alter_face_cluster.py
│ │ ├── 0046_add_embedded_media.py
│ │ ├── 0047_alter_file_embedded_media.py
│ │ ├── 0048_fix_null_height.py
│ │ ├── 0049_fix_metadata_files_as_main_files.py
│ │ ├── 0050_person_face_count.py
│ │ ├── 0051_set_person_defaults.py
│ │ ├── 0052_alter_person_name.py
│ │ ├── 0053_user_confidence_unknown_face_and_more.py
│ │ ├── 0054_user_cluster_selection_epsilon_user_min_samples.py
│ │ ├── 0055_alter_longrunningjob_job_type.py
│ │ ├── 0056_user_llm_settings_alter_longrunningjob_job_type.py
│ │ ├── 0057_remove_face_image_path_and_more.py
│ │ ├── 0058_alter_user_avatar_alter_user_nextcloud_app_password_and_more.py
│ │ ├── 0059_person_cover_face.py
│ │ ├── 0060_apply_default_face_cover.py
│ │ ├── 0061_alter_person_name.py
│ │ ├── 0062_albumthing_cover_photos.py
│ │ ├── 0063_apply_default_album_things_cover.py
│ │ ├── 0064_albumthing_photo_count.py
│ │ ├── 0065_apply_default_photo_count.py
│ │ └── __init__.py
│ ├── ml_models.py
│ ├── models
│ │ ├── album_auto.py
│ │ ├── album_date.py
│ │ ├── album_place.py
│ │ ├── album_thing.py
│ │ ├── album_user.py
│ │ ├── cache.py
│ │ ├── cluster.py
│ │ ├── face.py
│ │ ├── file.py
│ │ ├── __init__.py
│ │ ├── long_running_job.py
│ │ ├── person.py
│ │ ├── photo.py
│ │ └── user.py
│ ├── nextcloud.py
│ ├── permissions.py
│ ├── places365
│ │ ├── __init__.py
│ │ ├── places365.py
│ │ └── wideresnet.py
│ ├── schemas
│ │ └── site_settings.py
│ ├── semantic_search.py
│ ├── serializers
│ │ ├── album_auto.py
│ │ ├── album_date.py
│ │ ├── album_place.py
│ │ ├── album_thing.py
│ │ ├── album_user.py
│ │ ├── face.py
│ │ ├── __init__.py
│ │ ├── job.py
│ │ ├── person.py
│ │ ├── PhotosGroupedByDate.py
│ │ ├── photos.py
│ │ ├── simple.py
│ │ └── user.py
│ ├── services.py
│ ├── social_graph.py
│ ├── tests
│ │ ├── fixtures
│ │ │ ├── api_util
│ │ │ │ ├── captions_json.py
│ │ │ │ ├── expectation.py
│ │ │ │ ├── photos.py
│ │ │ │ └── sunburst_expectation.py
│ │ │ ├── geocode
│ │ │ │ ├── expectations
│ │ │ │ │ ├── mapbox.py
│ │ │ │ │ ├── nominatim.py
│ │ │ │ │ ├── opencage.py
│ │ │ │ │ ├── photon.py
│ │ │ │ │ └── tomtom.py
│ │ │ │ ├── __init__.py
│ │ │ │ └── responses
│ │ │ │ ├── mapbox.py
│ │ │ │ ├── nominatim.py
│ │ │ │ ├── opencage.py
│ │ │ │ ├── photon.py
│ │ │ │ └── tomtom.py
│ │ │ ├── __init__.py
│ │ │ ├── location_timeline_test_data.csv
│ │ │ ├── niaz.jpg
│ │ │ └── niaz.xmp
│ │ ├── __init__.py
│ │ ├── test_api_util.py
│ │ ├── test_delete_duplicate_photos.py
│ │ ├── test_delete_photos.py
│ │ ├── test_dirtree.py
│ │ ├── test_edit_photo_details.py
│ │ ├── test_favorite_photos.py
│ │ ├── test_geocode.py
│ │ ├── test_hide_photos.py
│ │ ├── test_im2txt.py
│ │ ├── test_location_timeline.py
│ │ ├── test_motion_photo.py
│ │ ├── test_only_photos_or_only_videos.py
│ │ ├── test_photo_captions.py
│ │ ├── test_photo_list_without_timestamp.py
│ │ ├── test_photo_summary.py
│ │ ├── test_predefined_rules.py
│ │ ├── test_public_photos.py
│ │ ├── test_reading_exif.py
│ │ ├── test_recently_added_photos.py
│ │ ├── test_regenerate_titles.py
│ │ ├── test_retrieve_photo.py
│ │ ├── test_scan_photos.py
│ │ ├── test_search_terms.py
│ │ ├── test_setup_directory.py
│ │ ├── test_share_photos.py
│ │ ├── test_user.py
│ │ ├── test_zip_list_photos_view_v2.py
│ │ └── utils.py
│ ├── thumbnails.py
│ ├── util.py
│ └── views
│ ├── album_auto.py
│ ├── albums.py
│ ├── custom_api_view.py
│ ├── dataviz.py
│ ├── faces.py
│ ├── __init__.py
│ ├── jobs.py
│ ├── pagination.py
│ ├── photos.py
│ ├── search.py
│ ├── services.py
│ ├── sharing.py
│ ├── timezone.py
│ ├── upload.py
│ ├── user.py
│ └── views.py
├── image_similarity
│ ├── __init__.py
│ ├── main.py
│ ├── retrieval_index.py
│ └── utils.py
├── librephotos
│ ├── __init__.py
│ ├── settings
│ │ ├── development.py
│ │ ├── __init__.py
│ │ ├── production.py
│ │ └── test.py
│ ├── urls.py
│ └── wsgi.py
├── LICENSE
├── manage.py
├── nextcloud
│ ├── admin.py
│ ├── apps.py
│ ├── directory_watcher.py
│ ├── __init__.py
│ ├── models.py
│ ├── tests.py
│ └── views.py
├── ownphotos
│ ├── __init__.py
│ └── wsgi.py
├── pyproject.toml
├── README.md
├── renovate.json
├── requirements.dev.txt
├── requirements.mlval.txt
├── requirements.txt
├── screenshots
│ ├── lp-square-black.png
│ ├── lp-white.png
│ ├── mockups_main_fhd.png
│ ├── more_to_discover.png
│ ├── photo_info_fhd.png
│ ├── photo_manage.png
│ └── site-logo.png
└── service
├── clip_embeddings
│ ├── __init__.py
│ ├── main.py
│ └── semantic_search
│ ├── __init__.py
│ └── semantic_search.py
├── face_recognition
│ ├── __init__.py
│ └── main.py
├── image_captioning
│ ├── api
│ │ └── im2txt
│ │ ├── blip
│ │ │ ├── blip.py
│ │ │ ├── med.py
│ │ │ └── vit.py
│ │ ├── build_vocab.py
│ │ ├── data_loader.py
│ │ ├── model.py
│ │ ├── README.md
│ │ ├── resize.py
│ │ ├── sample.py
│ │ └── train.py
│ ├── __init__.py
│ └── main.py
├── __init__.py
├── llm
│ ├── __init__.py
│ └── main.py
└── thumbnail
├── __init__.py
├── main.py
└── test
├── __init__.py
├── samples
│ └── README.md
└── test_thumbnail_worker.py
36 directories, 271 files
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论