pymdeco-python元数据提取器和集合管理器库

pymdeco的Python项目详细描述


pymdeco-python元数据提取和收集管理器

Pymdeco是一个旨在促进元数据提取的库, 大量照片和多媒体的存储和操作 (音频和视频)文件。 而不是为大量的文件开发自己的元数据解析器 类型,它依赖于第三方库和工具来提取 文件中的元数据。

示例用法

视频文件示例:

>>> from pymdeco import services
>>> srv = services.FileMetadataService()
>>> meta = srv.get_metadata('/tests/big_buck_bunny_720p_surround.avi')
>>> print(meta.to_json(indent=2)) # to pretty print the metadata
{
  "file_name": "big_buck_bunny_720p_surround.avi",
  "file_type": "video",
  "file_size": 332243668,
  "mime_type": "video/x-msvideo",
  "file_hash": {
    "value": "b957d6e6212638441b52d3b620af157cc8d40c2a0342669294854a06edcd528c",
    "algorithm": "sha256"
  },
  "file_timestamps": {
    "modified": "2008-06-11 13:29:26",
    "created": "2008-06-11 13:29:26"
  },
  "video_metadata": {
    "streams": [
      {
        "sample_aspect_ratio": "1:1",
        "codec_type": "video",
        "codec_name": "mpeg4",
        "duration": "596.457",
        "nb_frames": "14315",
        "codec_time_base": "1/24",
        "index": 0,
        "width": 1280,
        "divx_packed": "0",
        "pix_fmt": "yuv420p",
# ... output truncated

音频文件示例:

>>> meta = srv.get_metadata('/tests/jonobacon-freesoftwaresong2.mp3')
>>> print(meta.to_json(indent=2)) # to pretty print the metadata
{
  "file_name": "jonobacon-freesoftwaresong2.mp3",
  "file_type": "audio",
  "file_size": 3169160,
  "mime_type": "audio/mpeg",
  "file_hash": {
    "value": "d7ebc161d5d8fb802659fea949204af2958906b91913ca7577cfaeece90ffb78",
    "algorithm": "sha256"
  },
  "file_timestamps": {
    "modified": "2012-01-09 20:02:23",
    "created": "2012-01-09 20:02:23"
  },
  "audio_metadata": {
    "streams": [
      {
        "index": 0,
        "sample_fmt": "s16",
        "codec_tag": "0x0000",
        "bits_per_sample": 0,
        "r_frame_rate": "0/0",
        "start_time": "0.000",
        "time_base": "1/14112000",
        "codec_tag_string": "[0][0][0][0]",
        "codec_type": "audio",
        "channels": 2,
        "codec_long_name": "MP3 (MPEG audio layer 3)",
        "codec_name": "mp3",
... # output truncated

图像文件示例:

>>> meta = srv.get_metadata('/tests/some_image.jpg')
>>> print(meta.to_json(indent=2)) # to pretty print the metadata
{
  "file_name": "some_image.jpg",
  "file_type": "image",
  "file_size": 159894,
  "mime_type": "image/jpeg",
  "file_hash": {
    "value": "844a8750f2c9e1a24175c8f158abb6d204ec2b79fc49aba512cded3cdb3a0111",
    "algorithm": "sha256"
  },
  "file_timestamps": {
    "modified": "2012-01-09 20:43:12",
    "created": "2012-01-09 20:43:12"
  },
  "image_metadata": {
    "Exif": {
      "Photo": {
        "LightSource": 0,
        "PixelXDimension": 900,
        "SubSecTime": "16",
    # ... output truncated ... Image details follow
      "Image": {
        "YResolution": 72,
        "ResolutionUnit": 2,
        "Orientation": 1,
        "Copyright": "Some Rights Reserved                                  ",
        "Artist": "Yovko Lambrev                       ",
        "Make": "NIKON CORPORATION",
        "DateTime": "2008-09-13 11:26:41",
    # ... output truncated ... XMP details follow
    "Xmp": {
      "iptc": {
        "CreatorContactInfo/Iptc4xmpCore:CiEmailWork": "yovko@simplestudio.org",
        "CreatorContactInfo/Iptc4xmpCore:CiAdrCity": "Sofia",
        "CreatorContactInfo/Iptc4xmpCore:CiUrlWork": "http://simplestudio.org",
        "CreatorContactInfo/Iptc4xmpCore:CiAdrCtry": "Bulgaria"
    # ... output truncated ... IPTC details follow
    "Iptc": {
      "Application2": {
        "CountryName": "['Bulgaria']",
        "Byline": "['Yovko Lambrev']",
        "BylineTitle": "['Photographer']",
    # ... output truncated

二进制文件示例:

>>> meta = srv.get_metadata('/tests/minimal_ubuntu_11.04_natty.iso')
>>> print(meta.to_json(indent=2)) # to pretty print the metadata
{
  "file_name": "minimal_ubuntu_11.04_natty.iso",
  "file_type": "application",
  "file_size": 19922944,
  "mime_type": "application/x-iso9660-image",
  "file_hash": {
    "value": "8607e2c06090db13b06a216efbeb65d7aeff4ca8666904e6874cf4a5960f2366",
    "algorithm": "sha256"
  },
  "file_timestamps": {
    "modified": "2011-05-02 17:24:18",
    "created": "2011-05-02 17:24:18"
  }
}

命令行工具示例:

python metadump.py -p /some/path

安装

获取最新的开发版本:

hg clone https://bitbucket.org/todor/pymdeco

从源安装:

python setup.py install

生成HTML文档:

python setup.py build_doc

如果安装成功,可以使用以下代码 确认安装正常且存在所有依赖项:

检查依赖项:

>>> from pymdeco.utils import check_dependencies
>>> print json.dumps(check_dependencies(), indent=2)
{
  "pyexiv2": "pyexiv2: 0.3.2",
  "ffprobe": "/usr/bin/ffprobe"
}

如果任何字典值都不是,则pymdeco无法找到 一些依赖关系。

依赖性

  • python 2.7+或python 3.2+
  • pyexiv2库(这是python向 exiv2)。它用于从照片中提取EXIFXMPIPTC标记 以及图像(jpeg、png、gif等)。
  • ffprobe二进制(来自ffmpeg套件0.9.0或更高版本) 位于系统路径中。ffprobe的旧版本 (0.9.x之前版本)无法以JSON格式输出。
  • 狮身人面像(>;=1.0.0)-用于构建文档

注意

安装库1后,请确保 ffprobe可执行文件已安装并可供库使用 (可执行文件必须位于 路径环境变量。

有关安装ffmpeg套件的最佳方式,请参阅ffmpeg下载页 (它是ffprobe的一部分)。 在windows下,建议使用程序的静态版本。

文档

下载源代码并构建文档(请参见 Installation部分)将创建api文档的html版本。 文档包括教程,其中包含 展示如何使用和进一步扩展它的库和示例。

许可证

Pymdeco根据GNU LGPL(较低的通用公共许可证)版本3或 稍后。有关详细信息,请参阅源代码中包含的license.txt 分配。

开发和参与

这个库还处于早期阶段,但已经能够做足够有用的工作 元数据集合。如果你有兴趣进一步改进它 若要参与,请发送邮件至位于googlegroups.com的pymdeco。

历史和未来方向

这个图书馆是为了管理大量的照片而建立的 (数万)和视频片段(数千)收集在 不同来源和不同模式创造的时间段 照相机、摄像机和摄像头。

我很快发现,要识别重复项并有效地管理 备份我需要良好和可靠的元数据处理和存储。 在试验了六个python包和工具之后,我决定 利用成熟的第三方构建通用api 库和外部工具。

到目前为止,只有元数据提取部分已经基本完成,但是 为元数据开发某种持久性存储 路线图(包括使用mongodb或sqlite作为潜在的后端)。这个 持久存储将用于使用元数据构建集合,然后 结构查询“此文件是否已在集合中”、“是否存在” 集合中有一个类似的文件,“使用此元数据标记获取所有文件”或 “列出同一设备在同一日期创建的所有文件”。

有关详细信息,请参见todo.txt。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java生成随机浮点,包括两个边界   java三层体系结构风格是如何工作的?一些简单的例子   多线程可以使用线程。在Java中,在循环中使用sleep(),以便定期执行某些操作?   读取循环上的java HibernateMysql异常   java使用带有Apache Ivy的自定义存储库,未找到解析程序   filenotfoundexception在读取时出现问题。Java中的txt文件   嵌入式tomcat 8.0.21中的java Spring websocket   java为什么我需要创建一个类的引用,然后创建一个B类的对象   java Splashscreen动画在Mac OS中更新时闪烁   JavaSpring3。名为“zoneManagerDelegate”的x Bean必须是[com.ms.adsp.delegate.sapi.zoneManagerDelegate]类型,但实际上是[$Proxy20]类型   java SQLite:没有这样的专栏;不明错误   java将JTable定位到JFrame中JPanel中的(x,y)位置   java在导入组织方面面临挑战。知道。xchart*   xml读取Java中的SVG元素并跳过某些包含文本的元素   java Spring Redis问题:Redis缓存中的GetAllCacheNames不能与RedisCacheManager一起使用   java Vertex Hazelcast:集群问题   java如何编辑osgi托管服务实现使用的属性文件?   java Android活动并行启动?   java AWS Lambda用于将excel转储到数据库中