我写的一个以词搜图系统0.0.0版本

第一个本机以词搜图代码0.0.0

功能

对本机的图片能够进行导入,利用OCR技术提取文本后搜索关键词输出图像
这里仅实现了本机图片,还没有达到网络图片的搜索效果

实现

1.OCR:开始我准备用自己写的卷积神经网络,但是识别MNIST这种数据集还行,对于任意的图片识别效果属实不太可。于是我又转头去用cv,但是cv毕竟只是一个图像处理的工具。那怎么办呢?在网上查到资料,说tesseract可以有效的解决这个难题。于是我安装了tesseract和pytesseract模块,确实要比自己写的要强。毕竟对于一个大一的菜鸡而言,能够识别手写数字和英文字符就已经显得非常不容易了,然鹅图片中出现的更多的将会是数以万计的中文汉字。对,我接下来说的问题就是汉字。pytesseract模块使用确实可以解决无法识别中文,但是效果也是巨垃圾。最后,为了保证代码少,准度高,我一不做二不休套用了我百度AI的API(虽然很不人道但是我整个人已经菠萝菠萝哒)
2.文件预处理:这里我直接指定了文件夹路径。另外,为了检索和输出方便,我还会有一个重命名操作,将文件中图片全部以0以后的整数命名(可能这是一个鸡肋操作,但是。。。呃。。。莫得法,谁让我是个菜鸡呢)
3.可视化界面:为了使得程序更具观赏性,我特意加了一个图形化界面,背景图是我电脑里面的鬼灭之刃男女主的一张图片。有关图形化界面的东西我还是昨天半天之内面向CSDN编完的哈哈哈哈

代码

重命名操作代码mingming.py

import os
path='C:/Users/malia/Desktop/ocrtest/'
files=os.listdir(path)
i=0
for file in files:
    #重命名
    olddir=os.path.join(path,file)
    filename=os.path.splitext(file)[0]   #文件名
    filetype=os.path.splitext(file)[1]   #文件扩展名
    Newdir=os.path.join(path,str(i)+'.jpg')
    os.rename(olddir,Newdir)#重命名
    i+=1

核心代码

# -*- coding: utf-8 -*-
#首先引入各种包
import tkinter as tk
import cv2
import pandas as pd
import os
from aip import AipOcr
from PIL import Image,ImageTk
#接下来我们定义几个主要功能函数
#这里我们的OCR是直接套百度现成的,节约时间
#定义常量,我自己的百度密钥
APP_ID = '*******'
API_KEY = '***********'
SECRET_KEY = '************************'
# 初始化AipFace对象
client = AipOcr(APP_ID, API_KEY, SECRET_KEY)
#先设置一个文件路径,这个路径是我预先设好的,到了自己的电脑里面记得改一改
path='C:/Users/malia/Desktop/ocrtest/'
# 读取图片
def get_file_content(filePath):
	with open(filePath, 'rb') as fp:
		return fp.read()

def rename():
    os.system("python mingming.py")
    stp='文件预处理已经完毕'
    text2=tk.Text(win,width=30,height=1)
    text2.insert(tk.INSERT,stp)
    text2.pack()
        
def info_in():
    filelist=os.listdir(path)
    count=0
    text=[]
    for file in filelist:
            count+=1
    #获得文件夹里有多少文件
    for i in range(count):
            file='%d.jpg'%i
            image=get_file_content(path+file)
            res=client.basicAccurate(image)#调用开始了
            string=''
            for item in res['words_result']:
                    string+=item['words']
            #print(string)
            #print('**********************')
            text.append(string)#将提取的文本们以列表存储
            i+=1
    #print('图片导入完毕')
    num=range(count)
    number_column = pd.Series(num, name='number')#形成一个映射关系
    text_column = pd.Series(text, name='text')
    predictions = pd.concat([number_column, text_column], axis=1)
    #another way to handle
    save = pd.DataFrame({'number':num,'text':text})
    save.to_csv('database.csv')#图片与内容的映射关系存储到一个csv文件(因为我不会数据库)
    print('图片导入完毕')
    print('OCR工作完毕')
    str='图片与OCR工作已经完成'
    text1=tk.Text(win,width=30,height=1)
    text1.insert(tk.INSERT,str)
    text1.pack()#界面中显示
    
def delr():
        return e.get()
    
def search():
    path0='C:/Users/malia/Desktop/'
    df=pd.read_csv(path0+'database.csv')
    key=delr()
    count=0
    for i in df.text:
        if key in i:
            #print(i)
            print(count)
            img=cv2.imread(path+'%d.jpg'%count)
            cv2.imshow('%d.jpg'%count,img)
            cv2.waitKey()
            cv2.destroyAllWindows()
        count+=1
#现在咱们设计一下GUI界面
#首先是美化问题
win=tk.Tk()
win.title("搜图0.0.0")
#背景
canvas = tk.Canvas(win, width=500,height=300,bd=0, highlightthickness=0)
imgpath = 'D:/8.jpg'
img = Image.open(imgpath)
photo = ImageTk.PhotoImage(img)
canvas.create_image(300, 200, image=photo)
canvas.pack()#这一段都是美化作用

label=tk.Label(win,text='如需查询,请输入关键词')
label.pack()
e=tk.Variable()
entry=tk.Entry(win,textvariable=e,insertbackground='blue', highlightthickness =2)
entry.pack()
b=tk.Button(win,text="确定",command=delr)
#然后集成功能
button1=tk.Button(win,text='导入图片并处理',command=info_in)
button2=tk.Button(win,text='查询',command=search)
button3=tk.Button(win,text='重命名,若非第一次操作可以跳过',command=rename)
button1.pack()
button2.pack()
button3.pack()
win.mainloop()


效果

开始文件夹是这个样子
我写的一个以词搜图系统0.0.0版本_第1张图片
然后我们运行界面,我们的程序界面大概长这个样子
我写的一个以词搜图系统0.0.0版本_第2张图片
第一步,我们点击“重命名,若非第一次操作可以跳过”按钮,将文件夹里面的文件变成这个亚子
我写的一个以词搜图系统0.0.0版本_第3张图片
然后我们就是点击导入图片并处理
等待最后出现一个图片与OCR工作已完成的提示音以后就可以开始查询了
查询的时候注意,先输入关键词再查询,最后效果是这个样子
我写的一个以词搜图系统0.0.0版本_第4张图片

你可能感兴趣的:(程序设计,笔记,python)