查找图像文件的小工具(查找图像文件的小工具在哪里)

实现的原由:平时我们在电脑上要查找一个文档,一般我们可以给出文件名、日期、甚至文件内容。但是如果说想要在电脑里找一个”猫“或”“狗”的图片,或者一个特别内容的图片,普通文档查找的方式就无法解决。

设计思路

1、在搜索图像前,把需要检测的图像,建立一个图像内容索引,存放在一个索引文件中。不用每次搜索都要智能检测。还有可以定期更新重建图像内容索引。

这里建立图像内容索引,使用的是百度大脑,百度AI开放平台,https://ai.baidu.com/,免费的API:图像识别接口。当然也可以自己训练自己的图像模型。本文只是提供一个实现想法思路。

2、建立好图像内容索引后,直接根据输入图像的关键词进行搜索。

界面UI

一个图像内容关键词输入框,一个文件列表框,一个label用来显示图像的,两个功能按钮,一个用来图像搜索,一个用来建立图像内容索引。

查找图像文件的小工具(查找图像文件的小工具在哪里)

UI

实现代码

import sys
import os

查找图像文件的小工具(查找图像文件的小工具在哪里)

from PyQt5 import QtCore,QtGui,QtWidgets
from Ui_findimage import Ui_MainWindow
from aip import AipImageClassify
import cv2
import json
class MainWindow(QtWidgets.QMainWindow,Ui_MainWindow):
def __init__(self):
super().__init__()
self.setupUi(self)
self.btnfind.clicked.connect(self.findimg)
self.btnindex.clicked.connect(self.reindex)
self.reslist=[]
#建立图像内容索引
def reindex(self):
lstimg=[] #图像文件列表
lstidx=[] #图像内容索引列表
#选择文件夹
dirname=QtWidgets.QFileDialog.getExistingDirectory(self,'选择文件夹')
#获取文件夹中的所有图像文件
for root,dirs,files in os.walk(dirname):
for file in files:
if os.path.splitext(file)[1] in ['.jpg','.png','.bmp']:
lstimg.append(os.path.join(root,file))
self.statusBar().showMessage('正在建立图像内容索引...'+file)
keyindex=self.recobj(os.path.join(root,file))
if keyindex:
lstidx.append(keyindex)
QtWidgets.QApplication.processEvents()
#把结果放到listview中
slm=QtCore.QStringListModel()
slm.setStringList(lstimg)
self.filelistview.setModel(slm)
#默认显示第一张图片
if len(lstimg)>0:
#设置filelistview的当前索引为第一个
self.filelistview.setCurrentIndex(slm.index(0))
self.on_filelistview_clicked(self.filelistview.currentIndex())
#把列表写入文本文件,每行一个图像文件名,编码为utf-8
with open('index.txt','w',encoding="utf-8") as f:
for i in lstidx:
#字典转换为json字符串,编码为utf-8
sk=json.dumps(i,ensure_ascii=False)
f.write(sk+'\n')
self.statusbar.showMessage('图像内容索引已建立')
#图片识别
def recobj(self,imgpath):
""" 这里输入你创建应用获得的三个参数""",#请自行申请
APP_ID = '**********'
API_KEY = '******************'
SECRET_KEY = '***************'
client = AipImageClassify(APP_ID, API_KEY, SECRET_KEY)
#plantDetect carDetect logoSearch animalDetect dishDetect advancedGeneral
""" 调用通用物体识别 """
img=cv2.imread(imgpath)
gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
fimg=cv2.imencode('.jpg',gray)[1].tobytes()
try:
result=client.advancedGeneral(fimg)
#print(result)
if len(result['result'])>0:
for res in result['result']:
if res['score']>0.5:
dkey={imgpath:res['keyword']}
self.reslist.append(dkey)
except Exception as e:
print(e)
return
return self.reslist
def findimg(self):
lst=[] #结果图像文件列表
keyword=self.editkeyword.text().strip()
#判断图像内容索引是否存在
if not os.path.exists('index.txt'):
#提示图像内容索引不存在,请先建立图像内容索引,弹出对话框
reply=QtWidgets.QMessageBox.question(self,'提示','图像内容索引不存在,请先建立图像内容索引',QtWidgets.QMessageBox.Yes,QtWidgets.QMessageBox.No)
else:
#打开图像内容索引文件
with open('index.txt','r',encoding="utf-8") as f:
line=f.readline()
for ditem in eval(line):
#获取字典中的键值和键值对应的值
for k,v in ditem.items():
print(k,v)
if keyword in v:
if k not in lst:
lst.append(k)
#把结果放到listview中
slm=QtCore.QStringListModel()
slm.setStringList(lst)
self.filelistview.setModel(slm)
#默认显示第一张图片
if len(lst)>0:
#设置filelistview的当前索引为第一个
self.filelistview.setCurrentIndex(slm.index(0))
self.on_filelistview_clicked(self.filelistview.currentIndex())
#设置listview的单击事件
def on_filelistview_clicked(self,index):
#获取选中的图像文件的路径
filename=self.filelistview.model().stringList()[index.row()]
#设置标签的宽度
self.lblimg.setFixedWidth(self.filelistview.width())
#设置标签的图像自适应
#self.lblimg.setScaledContents(True)
#设置标签的图像按比例缩放
self.lblimg.setPixmap(QtGui.QPixmap(filename).scaled(self.lblimg.width(),self.lblimg.height(),QtCore.Qt.KeepAspectRatio))
#设置图像文件的标题
self.statusbar.showMessage(filename)
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
window = MainWindow()
window.setWindowTitle('FindImage')
window.show()
sys.exit(app.exec_())

运行测试

查找图像文件的小工具(查找图像文件的小工具在哪里)

未建图像内容索引提示

查找图像文件的小工具(查找图像文件的小工具在哪里)

建立图像索引

查找图像文件的小工具(查找图像文件的小工具在哪里)

查看图像

查找图像文件的小工具(查找图像文件的小工具在哪里)

搜索:大象

查找图像文件的小工具(查找图像文件的小工具在哪里)

搜索:车

程序已打包成单独的可执行文件,有需要的可以留言或私信。

以上内容来源于网络,由“WiFi之家网”整理收藏!

原创文章,作者:电脑教程,如若转载,请注明出处:https://www.224m.com/222236.html

(0)
电脑教程电脑教程
U盘和硬盘格式化时如何选择(u盘格式化怎么选择格式)
上一篇 2023年2月22日 08:14
192.168.1.100改密码-知道宽带账号怎么修改密码.
下一篇 2023年2月22日 08:25

相关推荐

  • 信息网络主要划分为哪几类(图文)

    【导读】信息网络主要划分为哪几类,下面就是WiFi之家网整理的网络知识百科,来看看吧!大家好,我是191路由器网小编,上述问题将由我为大家讲解。信息网络主要划分为互联网、涉密网络和非涉密网络。  信息网

    2021年8月15日
    5.4K
  • 钢制柱式散热器 钢制暖气片一组多少片?

    钢制柱式散热器 钢柱散热器怎么样?钢制暖气片一组多少片? 钢柱散热器是世界上最受欢迎的主流散热器产品,如森德公司的多柱钢管散热器MS等,采用冷轧低碳带钢和钢管,经切管、冲压、焊接、抛光、电泳、喷粉

    投稿 2022年7月27日
    6.5K
  • tplogincn路由器设置手机登陆入口(路由器调试步骤过程)

    本文目录1、tplogincn路由器设置手机登陆入口,路由器调试步骤过程?2、tplogincn默认网关?3、rac1950g易展版怎么设置成主路由器?4、tlwdr5620千兆版登录入口?5、xdr5430无线路由器怎么设置?tplogincn路由器设置手机登陆入口然后打开浏览器,输入192.168.1.1,一般是这个网站,不是的话就看路由器说明。输入用户名admin,

    2023年6月5日
    7.7K
  • 易展路由器主副设置(tp易展路由器怎么配对)

    易展路由器主副设置 易展路由器是一种智能网络设备,可以帮助我们实现无线局域网的覆盖与管理。在使用过程中,为了更好地发挥其作用,需要进行主副设置。 什么是主副设置? 主副设置是指将一…

    网络 2025年12月8日
    12.2K
  • win7出现Word已停止工作的三大解决方法(图)

    原标题:"解决win7出现Word已停止工作的三大方法"相关电脑问题教程分享。 - 来源:WiFi之家网。一般我们在使用电脑工作的时候,都需要用到office word。但是,一些用户在运行office

    2021年7月25日
    10.6K
  • 路由器必须设置吗(设置路由器必须插网线吗)

    路由器是一种网络设备,它可以将来自多个设备的网络流量进行转发和分发,从而实现多设备联网的功能。那么,在使用路由器的过程中,是否必须对路由器进行设置呢?接下来,我们就来探讨一下这个问…

    网络 2025年12月2日
    4.0K
  • IP地址自动显示(IP地址显示)

    大家晚上好,我是清枫。 不知道大家有没有注意到最近互联网一个问题,就是每个人账号下面都会显示IP地址,而且没有关闭这个IP地址功能。这就让有些朋友很郁闷,本来可以搞得很神秘,不想让…

    2023年2月26日
    1.1K
  • TP-LINK路由器设置端口映射步骤

    原标题:"TP-LINK路由器怎么设置端口映射?"相关路由器设置经验分享。 - 来源:WiFi之家网

    服务器怎么对外开放?很多用户自己在内网有搭建服务器,但是却无法被外网的用户访问"

    路由器设置 2021年2月8日
    23.4K
  • 区块链投资700元就能赚 区块链的通俗讲法?

    区块链投资700元就能赚 区块链如何盈利?区块链的通俗讲法? 1.投资比特币、以太币等数字货币可以获得巨大的回报。在过去的几年里,在这些数字货币投资中,如果你提前进入并在高峰期兑现,你将改变命运。

    投稿 2022年7月13日
    11.8K
  • 路由器只能上网不能设置(tp路由器怎么设置上网)

    路由器只能上网不能设置(tp路由器怎么设置上网) 很多人在购买了TP路由器之后,都会遇到一个问题,那就是只能上网,却不能进行设置。这个问题的原因很可能是因为路由器的默认IP地址与其…

    网络 2025年11月18日
    5.1K