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

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

设计思路

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

相关推荐

  • 使用两个路由器如何设置(如何链接两台路由器)

    如何使用两个路由器进行设置 对于一些大型的家庭或者办公场所,一个路由器可能无法满足所有设备的联网需求,这时候我们可以考虑使用两个路由器,以下是如何设置的步骤: 第一步:连接两个路由…

    网络 2023年12月23日
    413
  • tplogin.cn初始密码

    一、管理员密码? tplogin无线路由器,在出厂的时候,是没有设置初始管理员密码。是用户自己设置的,或者是给你按宽带的安装工设置的,而没有告诉你。 温馨提示: 由器是否有默认管理员密码的方法非常

    TP-LINK(普联) 2020年5月16日
    16.8K
  • tp-link路由器相关网站一览表

    原标题:"tp-link路由器相关网站有哪些"相关路由器设置经验分享。 - 来源:WiFi之家网
      现在很多家庭都会用到路由器,其中tp-link路由器是我们最常用到的,那么tp-link路由器的"

    路由器设置 2021年1月22日
    20.9K
  • 电脑怎么退出安全模式

    电脑的 安全模式 是什么呢?这是电脑windows操作系统里的一个模式,它可以起到保护电脑,修复系统产生的问题的作用。但是如果我们想要解除安全模式该怎么做呢?接下来小编就告诉你们接触电脑安全模式的方法。经常使用电脑的小伙伴们应该都知道电脑的安全模式可以帮我们的电脑修复很多问题。但是有的时候我们也会

    2021年10月1日
    3.6K
  • 腾达路由器f8750设置(腾达路由器设置192.168.0.1)

    腾达路由器f8750设置 腾达路由器f8750是一款性能稳定、功能强大的路由器,您可以通过访问192.168.0.1进行设置 步骤1:连接路由器 将电脑或手机与腾达路由器f8750…

    网络 2024年9月29日
    274
  • 路由器登录微信怎么设置(无信路由器怎么设置)

    路由器登录微信怎么设置(无信路由器怎么设置) 要在手机上登录路由器微信,需要先在路由器上设置好相应的参数。以下是具体步骤: 步骤1:打开路由器管理页面 首先需要在电脑上打开路由器的…

    网络 2023年12月6日
    144
  • 索尼电视稳坐高端大屏第一梯队(索尼高端电视用什么屏幕)

    [PConline 资讯]受到全球范围的新冠疫情影响,今年上半年整个消费市场都处于低迷状态,包括电视行业在内的很多领域,从产品开发、供应链,再到市场流通、销售,所有环节都面临巨大挑…

    2022年10月23日
    2.9K
  • 笔记本电脑开机密码忘了怎么办最简单的方法

    原标题:"电脑开机密码忘了怎么办?教你用PE工具清除开机密码"的相关路由器设置教程资料分享。

    利用PE清除并重设Windows系统的用户登陆密码

    大家好,我"

    电脑教程 2020年12月30日
    62.5K
  • tendawifi.com手机登陆腾达设置管理页面

    (导读:腾达路由器 tendawifi.com手机登陆设置管理页面)tendawifi.com是腾达路由器官网给出的进入路由器的界面地址。除了使用tendawifi.com这样的地址,我们还可以使用192.168."

    2020年12月30日
    70.2K
  • 宽带重新换路由器怎么设置【图】

    原标题:"宽带换了路由器怎么设置?【图】"的相关路由器192.168.1.1登陆页面设置教程资料分享。- 来源:WiFi之家网。

    问:家里的宽带换了,路由器连接上去后上不了网,请问路由器"

    2021年1月24日
    12.1K