下图为本运用的一个界面初步设计,通过标注的四个区域相互合营,即可完成一个UI设计,该工程会保存为一个.ui后缀名的UI文件,最好放在Python代码文件一起。本次界面设计并不繁芜,两个按钮,一个打开图片,另一个点击后开始查询;一个QComboBox部件,用于选择备选结果;一个图片显示区域,显示打开的查询图片,一个结果显示区域,显示查询结果详细内容。界面下面是视频显示区域,即该图片涌如今原动画中的视频片段。
详细的Qt Designer基本利用方法我就不在这里展开了,如果你第一次用,可以参考这个入门视频教程:https://www.bilibili.com/video/BV1cJ411R7bP ,讲得还挺好,我便是随着这个视频入门学习的。它的笔墨版教程在这里:http://www.python3.vip/tut/py/gui/qt_01/
我是利用的VSCode编辑器,推举一个插件——PYQT Integration,可以随时预览UI界面和编辑UI界面,也很方便把UI文件转换成Python代码。

在UI界面中加一个视频显示部分我花了不少韶光去研究,紧张由于Qt Designer中没有视频播放器的小部件,于是我就有点懵了,虽然可以直接编辑Python代码来弄,但为了统一流程,还是希望能在Qt Designer中支配好。经由一番研究,总结以下方法:第一步:拖拽一个Containers中的Widget到编辑界面;第二步:选择Widget部件,右键选择“提升为…(Promote to …)”;
第三步:设置“提升的类名称”为QVideoWidget,“头文件”为PyQt5.QtMultimediaWidgets
第四步:点击添加,然后点击提升。反应到编译的Python代码中,实在便是增加了一句from PyQt5.QtMultimediaWidgets import QVideoWidget
在利用时,可以参考下面代码利用(仅仅是一个示例),此处仅仅播放视频,没有停息、显示进度条等功能,如需增加,可以参考这篇教程:https://stackoverflow.com/questions/57842104/how-to-play-videos-in-pyqt
fromPyQt5.QtMultimediaimportQMediaContent,QMediaPlayer#首先初始化一个mediaPlayerself.mediaPlayer=QMediaPlayer(None,QMediaPlayer.VideoSurface)self.mediaPlayer.setVideoOutput(self.ui.VideoDisplay)#在须要利用这个mediaPlayer的函数中,从本地打开视频并播放self.mediaPlayer.setMedia(QMediaContent(QUrl.fromLocalFile(file_name)))self.mediaPlayer.play()
解码器下载
其余,须要下载一个解码器,不然播放mp4视频的时候会如下图一样报错。解码器的话下载安装 LAV 解码器就好,下载地址:LAV 0.74.1: Installer (both x86/x64)
功能实现trace.moe API先容与视频
它背后的实现依赖的是大数据+基于内容的图像检索(Content-based image retrieval ,CBIR),“基于内容”意味着搜索剖析图像的内容,而不是与图像干系的元数据,如关键字、标签或描述。术语“内容”在这个高下文中可能指的是颜色、形状、纹理或任何其他可以从图像本身衍生出来的信息。CBIR利用起来比较方便,由于它不须要标注信息,而纯粹依赖元数据的搜索依赖于标注的质量和完全性。wikipedia上有列出很多CBIR engines,trace.moe则利用了Lire。对付图像的描述,trace.moe则仅仅利用了颜色布局(Color Layout )。另一方面便是大数据,其背后的数据支撑为30096小时的视频内容(大约26亿帧),来自于3194部动画,大约18.1 TB大小。7.46亿帧索引(重复数据删除后),数据库大小为140 GB。详细实现细节可以参考:trace.moe slide和trace.moe github 项目。
如果你不关心实现细节,可以直接看下面的API接口利用。
importrequestsimg_path='xxx.png'traceMoe_api="https://trace.moe/api/search"files={"image":('anime.png',open(img_path,'rb'))}res=requests.post(traceMoe_api,files=files)
返回一个json结果,内容如下:
个中docs则包含了可能的结果,其内容如下:
得到这些内容后,就可以下载对应的视频片段:
url=f"https://trace.moe/preview.php?anilist_id={item['anilist_id']}&file={item['filename']}&t={item['at']}&token={item['tokenthumb']}"video=requests.get(url)withopen(item['filename'],'wb')asf:f.write(video.content)
当然,也不是每天无限制要求的,普通用户每天只能查询150次
利用Nuitka打包成exe文件
Nuitka的浸染是将Python程序转换成C措辞的可实行elf文件。这样在运行时就可以享受到C措辞处理过程中的优化,提高速率。经测试,Nuitka打包后的exe比Pyinstaller打包后的exe运行速率提升30%,PyQT5的UI文件转换成py文件转换成C措辞后,界面秒开呀。第一步:下载MinGW64 8.1,解压文件到C盘根目录,并将bin路径加入到环境变量中。然后安装Nuitka:pip install nuitka;
这样就表示成功了:
import的系统库,利用python3x.dll来实行,其他自己实现的UI界面和数据库的连接以及函数和功能实现,须要加密(反编译)和快速反应的,用户的体验就在这里,这部分借助Nuitka来实现。以下是Nuitka的关键命令段:--nofollow-imports #所有的import全部不该用,交给python3x.dll实行 --follow-import-to=need #need为你须要编译成C/C++的py文件夹命名——引用自:Python打包exe(32/64位)-Nuitka再下一城
第二步:调试阶段,逐个加入所需的轮子文件:首先运行nuitka --standalone --mingw64 --show-memory --show-progress --nofollow-imports --plugin-enable=qt-plugins --follow-import-to=need --output-dir=output app_main.py
然后运行output\app_main.dist中的app_main.exe,逐个找到缺的轮子的文件,并加入到output\app_main.dist目录下,如下图,表明短缺requests等库,则可以利用Everything,XSearch等软件快速定位文件所在地(关注"大众号:野风同学,回答“文件查找”即可获取软件)。加到可以运行为止。记住把这些库文件单独其余找一个文件夹放着,后面须要复制到正式输出的文件夹中。
第三步:天生阶段,运行nuitka --standalone --windows-disable-console --mingw64 --nofollow-imports --show-memory --show-progress --plugin-enable=qt-plugins --follow-import-to=need --recurse-all --output-dir=output app_main.py,然后将刚刚找到库文件复制到app_main.dist文件夹下。这样就基本完成了打包,进入app_main.dist中,点击app_main.exe即可运行(条件是安装了LAV 解码器,不然视频不会显示!
)。
下面演示一下:
视频加载中...
本文Python源码及exe打包后的软件,关注我的公众年夜众号“野风同学”,回答“以图搜番”即可获取。 一个程序员的自我发展之路,持续分享机器学习根本与运用、LeetCode口试算法和Python根本与运用等技能干货文章,同时也常常推抬高质量软件工具、网站和书本。