对图片进行索引,存入数据库中,实现快速搜索打开

  

这个任务分为两步:

第一步:建立索引

 import os
import shutil
import sqlite3
# 扫描函数,需扫描路径目录处理该目录及下级目录所有图片地址,简单明了 def scanDirSearchFile(dir, dbname):
connsqlite3 = sqlite3.connect(dbname)
cu = connsqlite3.cursor()
for root, dirs, files in os.walk(dir, True, None, False): # 遍列目录
# 处理该文件夹下所有文件: for f in files:
if os.path.isfile(os.path.join(root, f)):
ext = os.path.splitext(f)[1].lower()
if ext in ('.jpg', '.png', '.bmp'):
# print os.path.join(root,f)
cu.execute("insert into photoaddress(photoaddress,photoname) values(?,?);",
((os.path.join(root, f)), (f)))
pass
connsqlite3.commit()
# 初始化数据库表
def CreatePhotoDB(sqliteName):
# 数据库文件处理
connsqlite3 = sqlite3.connect(sqliteName)
cu = connsqlite3.cursor()
# 创建表
sql = "create table IF NOT EXISTS photoaddress(photoaddress varchar(400),photoname varchar(200));"
cu.execute(sql)
# 创建图片地址索引
sql = "create index IF NOT EXISTS photoaddress_photoaddress on photoaddress(photoaddress);"
cu.execute(sql)
# 创建图片名索引
sql = "create index IF NOT EXISTS photoaddress_photoname on photoaddress(photoname);"
cu.execute(sql)
# 清空库表
sql = "delete from photoaddress;"
cu.execute(sql)
connsqlite3.commit()
if __name__ == "__main__":
path = 'E:\\Users\A\Pictures\Pictures\lfw'
work_dir = os.path.abspath(path) # 图片放置目录 sqliteName = os.path.join(work_dir, "photo.db") # sqlite数据库文件 # 初始化数据库表
CreatePhotoDB(sqliteName) # 扫描目录,刷新数据库 scanDirSearchFile(work_dir, sqliteName)

第二部:界面+索引比对:

 import sys
import pandas as pd
from PIL import Image
import matplotlib.pyplot as plt
import sqlite3
from PyQt5 import QtWidgets, QtCore
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore import*
from PyQt5 import QtCore
dbpath = 'E:\\Users\A\Pictures\Pictures\lfw\\photo.db'
conn = sqlite3.connect(dbpath)
class MainWindow(QWidget):
def __init__(self,parent=None):
super(MainWindow,self).__init__(parent)
self.status = 0
self.initUi(MainWindow)
self.layout = QGridLayout(self)
self.setLayout(self.layout) def initUi(self,MainWindow):
self.createGridGroupBox()
self.creatFormGroupBox() mainLayout = QVBoxLayout()
hboxLayout = QHBoxLayout()
# hboxLayout.addStretch()/拉升上面空间
hboxLayout.addWidget(self.gridGroupBox)
mainLayout.addLayout(hboxLayout)
mainLayout.addWidget(self.formGroupBox)
self.setLayout(mainLayout) @pyqtSlot(bool)
def on_btn_open_clicked(self):
self.status = 1
self.filename = QFileDialog.getOpenFileName(self, "OpenFile", ".",
"Image Files(*.jpg *.jpeg *.png)")[0]
# filename = self.filename
print(self.filename)
print(type(self.filename))
print('status:',self.status)
self.createGridGroupBox()
self.picture_R(self.filename)
# self.initUi()
# print(self.createGridGroupBox(filename)) return self.status,self.filename def createGridGroupBox(self):
self.gridGroupBox = QGroupBox("Demo")
layout = QGridLayout()
nameLabel = QLabel("picture_name")
self.nameLineEdit = QLineEdit("")
layout.addWidget(nameLabel, 1, 0)
layout.addWidget(self.nameLineEdit, 1, 1) imgeLabe1 = QLabel()
imgeLabe2 = QLabel()
# while(true):
pixMap = None layout.setSpacing(10)
layout.addWidget(imgeLabe1, 0, 2, 4, 1)
layout.update()
self.gridGroupBox.setLayout(layout)
self.setWindowTitle('Search picture') def creatFormGroupBox(self):
self.formGroupBox = QGroupBox("Form layout")
layout = QFormLayout() serchBtn = QPushButton('查找') # manage_Btn.clicked.connect(manage_ui.manage)
serchBtn.clicked.connect(self.name_link)
# tphoBtn.clicked.connect(realtime_facenet_git.detectface) imgeLabe2 = QLabel()
pixMap = QPixmap("fileName1")
imgeLabe2.setPixmap(pixMap)
layout.addWidget(imgeLabe2)
hbox = QHBoxLayout()
hbox.addWidget(serchBtn) vbox = QVBoxLayout()
vbox.addLayout(hbox) self.formGroupBox.setLayout(vbox)
def getName(self):
name = self.nameLineEdit.text() # 获取文本框内容 df = ('文件名: %s \n ' % (name))
print(df)
return name
def name_link(self): cursor = conn.execute("SELECT photoname,photoaddress from photoaddress")
filename = self.getName()
# filename = "202599.jpg"
for row in cursor:
# print(row[0])
if row[0] == filename:
print(row[1]) img = Image.open(row[1])
plt.figure("Results")
plt.imshow(img)
plt.show()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = MainWindow()
ex.show()
sys.exit(app.exec_())

对图片进行索引,存入数据库sqlite3中,实现快速搜索打开的更多相关文章

  1. 借助Mac自带的强大的搜索功能,如何快速搜索打开Tuxera Disk Manager

    现在很多小伙伴们在遇到Mac读写NTFS格式硬盘问题的时候,都会选择使用Tuxera NTFS这个磁盘读写工具.因为这款读写工具不仅可以帮助我们进行读写工作,还具有一个磁盘管理工具Disk Manag ...

  2. 数据库 - SQLite3 中的数据类型

    ------------------------------ 安装 Sqlite3 和 数据库查看工具: sudo apt-get install sqlite3 sudo apt-get insta ...

  3. Springboot(九).多文件上传下载文件(并将url存入数据库表中)

    一.   文件上传 这里我们使用request.getSession().getServletContext().getRealPath("/static")的方式来设置文件的存储 ...

  4. 转:SQL SERVER数据库中实现快速的数据提取和数据分页

    探讨如何在有着1000万条数据的MS SQL SERVER数据库中实现快速的数据提取和数据分页.以下代码说明了我们实例中数据库的“红头文件”一表的部分数据结构: CREATE TABLE [dbo]. ...

  5. 为什么说B+-tree比B 树更适合实际应用中操作系统的文件索引和数据库索引?

    B树: B+树 1) B+-tree的磁盘读写代价更低 B+-tree的内部结点并没有指向关键字具体信息的指针.因此其内部结点相对B 树更小.如果把所有同一内部结点的关键字存放在同一盘块中,那么盘块所 ...

  6. B+树比B树更适合实际应用中操作系统的文件索引和数据库索引

    B+树比B树更适合实际应用中操作系统的文件索引和数据库索引 为什么选择B+树作为数据库索引结构?   背景 首先,来谈谈B树.为什么要使用B树?我们需要明白以下两个事实: [事实1]不同容量的存储器, ...

  7. 解决:HTML中多文本域(textarea)回车后数据存入数据库,EL表达式取出异常。

    问题描述: 当多文本域(textarea)回车后数据存入数据库. EL表达式取出异常,值换行倒置页面报错. 问题解决: 存值脚本代码,提交前转换\n为<br/>. <script t ...

  8. iOS开发中的4种数据持久化方式【二、数据库 SQLite3、Core Data 的运用】

                   在上文,我们介绍了ios开发中的其中2种数据持久化方式:属性列表.归档解档.本节将继续介绍另外2种iOS持久化数据的方法:数据库 SQLite3.Core Data 的运 ...

  9. 关于数据库表中的索引及索引列的CRUD

     -- 查询一个数据库表中的索引及索引列use [RuPengWangDB]GOSELECT  indexname = a.name , tablename = c. name , indexcolu ...

随机推荐

  1. AngularJs 隔离作用域

    初学NG,有诸多的不解,今天看了一篇文章,原文地址:https://segmentfault.com/a/1190000002773689#articleHeader0 ,本文运行的代码也出处此. 里 ...

  2. 解决ExtJs Uncaught TypeError: c is not a constructor错误

    ExtJs项目使用sencha app build编译以后,浏览时很容易抛出Uncaught TypeError: c is not a constructor的错误,而且会加载没有名称的js,例如 ...

  3. 2014金山笔试_编写一个数组类 MyVector

    //编写一个数组类 MyVector,数组内容可以动态扩充,实现构造,析构,赋值操作符重载,插入,删除,获取元素个数,获取数组容量(不可以使用STL等的容器类,不能使用 //不连续的存储空间) #in ...

  4. Django入门三之urls.py重构及参数传递

    1. 内部重构 2. 外部重构 website/blog/urls.py website/website/urls.py 3. 两种参数处理方式 -1. blog/index/?id=1234& ...

  5. AngularJS 最常用的几种功能

    AngularJS 最常用的几种功能 2017-04-13 吐槽阿福 互联网吐槽大会 第一 迭代输出之ng-repeat标签ng-repeat让table ul ol等标签和js里的数组完美结合 1 ...

  6. DB2 存储过程创建、系统表

    前段时间做了数据表拆分,进行数据迁移,用到一些SQL命令,语句记录下来 db2look是DB2用于生成数据库DDL语句的一个工具: 命令:db2look -d DBname -a -e -p -i u ...

  7. centos6.9 升级内核版本

    想在centos6.9上安装docket,不过因为内核版本是2.6的故而想升级到最新的内核版本 晚上有编译升级的比较麻烦,不过有助于理解内核升级,我使用的直接升级到最新版方法 1. 导入public ...

  8. 使用STM32Cube在STM32F7开发板上实现SD+Freertos+Fatfs

    简介 最近项目中可能需要使用到SD卡,所以需要对SD卡的配置和使用调研,在配置过程中遇到了一些问题,在此记录一下. STM32Cube配置 Pinout 只需要注意绿色部分的设定 Clock配置 这里 ...

  9. [爬虫]Fiddler证书错误

    在使用fiddler抓包的时候出现 creation of the root certificate was not successful 这个错误出现这个错误会导致https包抓不到 解决方法:1. ...

  10. python中 __cmp__

    对 int.str 等内置数据类型排序时,Python的 sorted() 按照默认的比较函数 cmp 排序,但是,如果对一组 Student 类的实例排序时,就必须提供我们自己的特殊方法__cmp_ ...