Skip to content
/ yamdc Public

一个不太正经的电影元数据刮削工具

Notifications You must be signed in to change notification settings

xxxsen/yamdc

Repository files navigation

yamdc

由于原先的MovieDataCapture作者把工具闭源了, 只能自己写一个了。

使用方式

推荐使用docker运行。 在非linux环境下运行, 部分特性无法启用。

docker运行

使用docker运行, 对应的docker-compose.yml参考下面文件

//docker-compose.yml

version: "3.1"
services:
  yamdc:
    image: xxxsen/yamdc:latest
    container_name: yamdc
    user: "1000:1000" #指定uid/gid, 根据需要修改
    volumes:
      - /data/scrape/scandir:/scandir
      - /data/scrape/savedir:/savedir
      - /data/scrape/datadir:/datadir
      - /data/config:/config
    command: --config=/config/config.json

程序的配置文件如下

//config.json

{
    "scan_dir": "/scandir",
    "save_dir": "/savedir",
    "data_dir": "/datadir",
    "naming": "{YEAR}/{NUMBER}"
}

需要挂载扫描目录(/scandir), 存储目录(/savedir), 数据目录(/datadir)和配置目录(/config), 这几个目录在自己的配置文件中指定。

配置完成后, 使用docker compose up 进行刮削, 刮削完成的电影会被存储到/data/scrape/savedir下。

NOTE: 程序依赖go-face进行人脸识别, 以用于识别图片中的人脸并进行截图, 这个库需要有对应的模型文件, 程序启动的时候, 会检测模型文件是否存在, 如果不存在, 则会自动下载模型文件到数据目录

手动编译

程序编译需要go环境, 版本需要>=1.21, 请自行安装。

依赖相关

linux下编译, 需要安装相关的依赖, 可以使用下面的命令进行安装

# Ubuntu
sudo apt-get install libdlib-dev libblas-dev libatlas-base-dev liblapack-dev libjpeg-turbo8-dev gfortran
# Debian
sudo apt-get install libdlib-dev libblas-dev libatlas-base-dev liblapack-dev libjpeg62-turbo-dev gfortran
# 其他
# 我也不知道其他发行版对应的依赖名是啥...

NOTE: 如果不是编译linux下的可执行文件则可以跳过安装依赖部分, 当然, 缺少依赖会导致后面的人脸识别特性无法开启。

编译&运行

CGO_LDFLAGS="-static" CGO_ENABLED=1 go build -a -tags netgo -ldflags '-w' -o yamdc ./

编译完成后, 会在目录下生成对应的可执行文件(windows用户需要重命名下, 给可执行文件增加.exe 后缀。)

之后执行下面命令运行即可。

# --config指定配置文件位置, 详细配置参考后续章节。
./yamdc --config=./config.json

基础配置

{
    "scan_dir": "/dir/to/scan",
    "save_dir": "/dir/to/save/scraped/data",
    "data_dir": "/dir/to/save/models/and/cache",
    "naming": "naming rule, specify naming rule you want, example: {YEAR}/{NUMBER}"
}
配置项 说明
scan_dir 扫描目录, 程序会扫描该目录并对其中的影片进行刮削
save_dir 保存目录, 刮削成功的电影会被移动到该目录, 并按naming指定的命名规则进行命名
data_dir 数据目录, 存储中间文件或者模型文件的
naming 命名规则, 可用的命名标签如下:{DATE}, {YEAR}, {MONTH}, {NUMBER}, {ACTOR}

其他

性能问题

上面的docker-compose.yml的例子将扫描、存储、数据目录分别挂载在3个不同的目录下, 这在docker中会导致golang的os.Rename执行失败, 导致使用低效率的复制方式, 为了避免这个问题, 可以考虑将/data/scrape直接挂载到一个目录中, 来避免跨设备复制问题。

version: "3.1"
    ...
    volumes:
      - /data/scrape:/scrape 

NOTE: 假定/data/scrape下已经有scandir, savedir, datadir 3个目录

对应的配置文件修改

{
    ...
    "scan_dir": "/scrape/scandir",
    "save_dir": "/scrape/savedir",
    "data_dir": "/scrape/datadir",
    ...
}