⁉️ 2024年1月 复制时评:垃圾代码,不过也是一段经历。所以就不更改内容了。
本项目用的Python,需要安装opencv库与numpy还有Pillow库,具体安装方法自行bing。
导入所有库:
import tkinter as tk
from tkinter import *
from tkinter import filedialog
import cv2
import requests
import numpy as np
from PIL import Image, ImageTk
项目里主要采用了Paddle OCR,实际上是采用的一个云识别的技术。
def analy_img(self, event=None):
if self.filenames:
for k in range(len(self.filenames)):#这里filenames是选中的文件
password='8907'
url = "http://www.iinside.cn:7001/api_req"
filePath= self.filenames[k]#传入图片
data={
'password':password,
'reqmode':'ocr_pp'
}
files=[('image_ocr_pp',('wx.PNG',open(filePath,'rb'),'application/octet-stream'))]
headers = {}
response = requests.post( url, headers=headers, data=data, files=files)
将返回的response以text形式返回,然后进行字符串的处理分析。
txt = response.text
#计算每一个币有几张
yi = txt.count("壹圆")
wu = txt.count("伍圆")
shi = txt.count("拾圆")
ershi = txt.count("贰拾圆")
wushi = txt.count("伍拾圆")
yibai = txt.count("壹佰圆")
tshi = shi-ershi-wushi #十元与二十、五十均带有十,用tshi代表真正的十个数
num = yi+wu+tshi+ershi+wushi+yibai #计算纸币张数
num = str(num)
bizhi= yi*1+wu*5+tshi*10+ershi*20+wushi*50+yibai*100 #计算总的币值
bizhi = str(bizhi)
over = ("共有纸币"+num+"张,共"+bizhi+"元")
global flag #这里将flag作为全局参数,这样才能容易把flag传出去显示到GUI上。
flag.set(over) #将over得到的值设置给flag,等会flag要显示到GUI上
选择文件:
def choose_pic(self, event=None):
self.filenames.clear()
self.filenames += filedialog.askopenfilenames()
显示图片
def display_image(self, event=None):
#在重新选择图片时清空原先列表
self.pic_filelist.clear()
self.imgt_list.clear()
self.image_labellist.clear()
#清空框架中的内容
for widget in self.image_frame.winfo_children():
widget.destroy()
#布局所选图片
for i in range(len(self.filenames)):
self.pic_filelist.append(Image.open(self.filenames[i]).resize((200,200)))
self.imgt_list.append(ImageTk.PhotoImage(image=self.pic_filelist[i]))
self.image_labellist.append(Label(self.image_frame, highlightthickness=0, borderwidth=0))
self.image_labellist[i].configure(image=self.imgt_list[i])
self.image_labellist[i].pack(side=LEFT, expand=True)
GUI框架部分
class DisplayImage:
'''用于展示选择的图片'''
def __init__(self, master):
self.master = master
master.title("GUI")
self.image_frame = Frame(master, bd=0, height=200, width=800, bg='yellow', highlightthickness=2,
highlightbackground='gray', highlightcolor='black')
self.image_frame.pack()
self.Text_label = Label(master, text='图像预览')
self.Text_label.pack()
self.Choose_image = Button(master, command=self.choose_pic, text="选择图片",
width=17, default=ACTIVE, borderwidth=0)
self.Choose_image.pack()
self.Display_image = Button(master, command=self.display_image, text="显示图片",
width=17, default=ACTIVE, borderwidth=0)
self.Display_image.pack()
self.Analy_image = Button(master, command=self.analy_img, text="分析1",
width=17, default=ACTIVE, borderwidth=0)
self.Analy_image.pack()
global flag
flag = StringVar()# 初始化flag
flag.set('0元')
self.filenames = []
self.pic_filelist = []
self.imgt_list = []
self.image_labellist = []
#显示结果模块
self.out = Label(master,textvariable = flag)#用可变text显示flag
self.out.pack()
这部分代码实现初始化框架
最终结果效果图:
前面的接口是可以换的,就是那个分析的前部分,你喜欢也可以换成其他百度,阿里这些的OCR