说明:若没有训练级联表,则需要相关级联表才能实现功能
文字识别
# -*- coding: utf-8 -*- """ 简介:用样本训练数据,再识别 """ import cv2 import numpy as np from PIL import Image #Python Image Lib import skimage.feature as feature2d import sklearn.neighbors as nhb from sklearn.externals import joblib #对训练模型保存或读取 #cvhog=cv2.HOGDescriptor() #预处理图片 def imgPrepare(filename): img=cv2.imread(filename,0) img=np.uint8(img/img.ptp()*255) img=np.where(img>128,255,img) img=np.where(img<=128,0,img) img=np.bitwise_not(img) return img #横切 def splitchar(img,axis=1): idxrowb=np.all(img<64,axis=axis) idxrowi=np.uint8(idxrowb).ravel() dy=idxrowi[1:]-idxrowi[:-1] #print(dy) rowb=np.argwhere(dy==255).ravel() rowe=np.argwhere(dy==1).ravel() #print(rowb,rowe) if axis==1: imglines=[img[b:e+1,:] for b,e in zip(rowb,rowe)] else: imglines=[img[:,b:e+1] for b,e in zip(rowb,rowe)] return imglines #切块 def splitBox(img): idxrowb=np.all(img<64,axis=1) idxrowi=np.uint8(idxrowb).ravel() dy=idxrowi[1:]-idxrowi[:-1] #print(dy) rowb=np.argwhere(dy==255).ravel() rowe=np.argwhere(dy==1).ravel() b=0 e=-1 if len(rowe)>0: e=rowe[-1]+1 if len(rowb)>0: b=rowb[0] return img[b:e,:] #把图片整成一样大小 def myResize(img,size=(48,48)): h,w=img.shape bw=max(h,w) bh=bw bimg=np.zeros((bh,bw),np.uint8) if bw==w: dh=(bh-h)//2 bimg[dh:dh+h,:]=img[:,:] else: dw=(bw-w)//2 bimg[:,dw:dw+w]=img[:,:] bimg=cv2.resize(bimg,size) return bimg #获取hog向量 图片转为向量 def getHog(img,cell=(16,16),block=(3,3)): vec=feature2d.hog(img,12,cell,block,'L2') return vec #训练的主方法 gimg=imgPrepare('e:/sx.jpg') lines=splitchar(gimg,axis=1) chars=[] for line in lines: charlist=splitchar(line,axis=0) cchars=[ myResize(splitBox(c)) for c in charlist] chars.append(cchars) chars=np.asarray(chars) X=[] Y=[] y=0 for linech in chars: for ch in linech: chhog=getHog(ch) X.append(chhog) Y.append(y) y+=1 KNC=nhb.KNeighborsClassifier(algorithm='ball_tree',n_neighbors=3) KNC.fit(X,Y) joblib.dump(KNC,'knc.knn') # 识别的主方法 def predict(img): knc=nhb.KNeighborsClassifier(algorithm='ball_tree',n_neighbors=3) knc=joblib.load('knc.knn') lines=splitchar(img,axis=1) chars=[] for line in lines: charlist=splitchar(line,axis=0) cchars=[ myResize(splitBox(c)) for c in charlist] chars.append(cchars) chars=np.asarray(chars) Y=[] for linech in chars: x=[] for ch in linech: chhog=getHog(ch) x.append(chhog) y=knc.predict(x) print(y) Y.append(y) return Y
语音处理
def input(self,overtime=60,Noise=12000): time.sleep(0.5) pa=au.PyAudio() stream=pa.open(format = au.paInt16, channels = 1, rate = 16000, input = True,frames_per_buffer = 4000) spk=pa.open(format=au.paInt16,channels=1,rate=16000,output=True,frames_per_buffer=1000) filename='./temp/in_%s.wav'%(self._gettoken()) #pcm格式 wf = wave.open(filename, 'wb') wf.setnchannels(1) wf.setsampwidth(2) wf.setframerate(16000) ch=0 ptparr=np.array([0,0,0,0]) begin=False while ch<overtime*4: ch+=1 bs=stream.read(4000) #spk.write(bs) arr=np.frombuffer(bs,dtype=np.short) ptp=arr.max()*1.0-arr.min()*1.0 ptparr[:-1]=ptparr[1:] ptparr[-1]=np.abs(ptp) if not begin: if ptparr[-1]>Noise * 1.5: begin=True ch=1 wf.writeframes(bs) if self.debuge: print('+',end='') else: if np.all(ptparr<Noise): if self.debuge: print('+') break else: if self.debuge: print('-',end='') wf.writeframes(bs) stream.close() spk.close() wf.close() wr=wave.open(filename,'rb') buf=wr.readframes(wr.getnframes()) wr.close() pa.terminate() return filename,buf # self.speech.asr() def inputvoice(self,overtime=60,Noise=12000): fn,buf=self.input(overtime,Noise) result=self.speech.asr(buf) msgs=[] if 'result' in result.keys(): msgs=result['result'] msg='' for m in msgs: msg+=str(m) return result['err_no'],msg
#语音处理,录音 def input(self,overtime=60,Noise=12000): time.sleep(0.5) pa=au.PyAudio() stream=pa.open(format = au.paInt16, channels = 1, rate = 16000, input = True,frames_per_buffer = 4000) spk=pa.open(format=au.paInt16,channels=1,rate=16000,output=True,frames_per_buffer=1000) filename='./temp/in_%s.wav'%(self._gettoken()) #pcm格式 wf = wave.open(filename, 'wb') wf.setnchannels(1) wf.setsampwidth(2) wf.setframerate(16000) ch=0 ptparr=np.array([0,0,0,0]) begin=False while ch<overtime*4: ch+=1 bs=stream.read(4000) #spk.write(bs) arr=np.frombuffer(bs,dtype=np.short) ptp=arr.max()*1.0-arr.min()*1.0 ptparr[:-1]=ptparr[1:] ptparr[-1]=np.abs(ptp) if not begin: if ptparr[-1]>Noise * 1.5: begin=True ch=1 wf.writeframes(bs) if self.debuge: print('+',end='') else: if np.all(ptparr<Noise): if self.debuge: print('+') break else: if self.debuge: print('-',end='') wf.writeframes(bs) stream.close() spk.close() wf.close() wr=wave.open(filename,'rb') buf=wr.readframes(wr.getnframes()) wr.close() pa.terminate() return filename,buf # self.speech.asr() def inputvoice(self,overtime=60,Noise=12000): fn,buf=self.input(overtime,Noise) result=self.speech.asr(buf) msgs=[] if 'result' in result.keys(): msgs=result['result'] msg='' for m in msgs: msg+=str(m) return result['err_no'],msg
import cv2 import numpy as np from PIL import Image #pip install PIL #pip install opencv-python #pip install dlib dector=cv2.CascadeClassifier() ret=dector.load('haarcascade_frontalface_alt_tree.xml') if not ret: print('未找到级联表文件:plate_cascade.xml') exit() img=cv2.imread('e:/85n.jpg') if img is None: print('文件不存在') exit() #彩色转成灰度图像 gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) gray=np.uint8(gray/gray.ptp()*255) boxs=dector.detectMultiScale(gray,1.015,1) platelist=[] for box in boxs: x,y,w,h=box g=img[y:y+h,x:x+w,:] platelist.append(g) linew=h//100+1 cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),linew) gimg=cv2.cvtColor(img,cv2.COLOR_BGR2RGB) image=Image.fromarray(gimg) image.show() image.close()
import cv2 detector=cv2.CascadeClassifier() ret=detector.load('plate_cascade.xml') if not ret: print('error') quit() img=cv2.imread('cars1.jpg') gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) boxs=detector.detectMultiScale(gray,1.01,3) for box in boxs: x,y,w,h=box p=img[y:y+h,x:x+w:] name='%d_%d.jpg'%(x,h) cv2.imwrite(name,p)
# -*- coding: utf-8 -*- """ Created on Thu May 17 18:13:35 2018 @author: inspiron """ import cv2 from PIL import Image hog=cv2.HOGDescriptor() hog.setSVMDetector(cv2.HOGDescriptor_getDefaultPeopleDetector()) img=cv2.imread('e:/1.jpg') boxs,rets=hog.detectMultiScale(img) for box in boxs: x,y,w,h=box cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2) gimg=cv2.cvtColor(img,cv2.COLOR_BGR2RGB) image=Image.fromarray(gimg) image.show() cam=cv2.VideoCapture(0) while True: ret,img=cam.read() if not ret: break boxs,rets=hog.detectMultiScale(img) for box in boxs: x,y,w,h=box cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2) cv2.imshow('hog',img) ch=cv2.waitKey(5) if ch==27: break cv2.destroyAllWindows() cam.release()
# -*- coding: utf-8 -*- """ Created on Thu May 17 19:30:13 2018 @author: AI04班级 """ import cv2 import numpy as np from PIL import Image #Python Image Lib import skimage.feature as feature2d import sklearn.neighbors as nhb from sklearn.externals import joblib #对训练模型保存或读取 #cvhog=cv2.HOGDescriptor() def imgPrepare(filename): img=cv2.imread(filename,0) img=np.uint8(img/img.ptp()*255) img=np.where(img>128,255,img) img=np.where(img<=128,0,img) img=np.bitwise_not(img) return img def splitchar(img,axis=1): idxrowb=np.all(img<64,axis=axis) idxrowi=np.uint8(idxrowb).ravel() dy=idxrowi[1:]-idxrowi[:-1] #print(dy) rowb=np.argwhere(dy==255).ravel() rowe=np.argwhere(dy==1).ravel() #print(rowb,rowe) if axis==1: imglines=[img[b:e+1,:] for b,e in zip(rowb,rowe)] else: imglines=[img[:,b:e+1] for b,e in zip(rowb,rowe)] return imglines def splitBox(img): idxrowb=np.all(img<64,axis=1) idxrowi=np.uint8(idxrowb).ravel() dy=idxrowi[1:]-idxrowi[:-1] #print(dy) rowb=np.argwhere(dy==255).ravel() rowe=np.argwhere(dy==1).ravel() b=0 e=-1 if len(rowe)>0: e=rowe[-1]+1 if len(rowb)>0: b=rowb[0] return img[b:e,:] def myResize(img,size=(48,48)): h,w=img.shape bw=max(h,w) bh=bw bimg=np.zeros((bh,bw),np.uint8) if bw==w: dh=(bh-h)//2 bimg[dh:dh+h,:]=img[:,:] else: dw=(bw-w)//2 bimg[:,dw:dw+w]=img[:,:] bimg=cv2.resize(bimg,size) return bimg def getHog(img,cell=(16,16),block=(3,3)): vec=feature2d.hog(img,12,cell,block,'L2') return vec #main gimg=imgPrepare('e:/sx.jpg') lines=splitchar(gimg,axis=1) chars=[] for line in lines: charlist=splitchar(line,axis=0) cchars=[ myResize(splitBox(c)) for c in charlist] chars.append(cchars) chars=np.asarray(chars) X=[] Y=[] y=0 for linech in chars: for ch in linech: chhog=getHog(ch) X.append(chhog) Y.append(y) y+=1 KNC=nhb.KNeighborsClassifier(algorithm='ball_tree',n_neighbors=3) KNC.fit(X,Y) joblib.dump(KNC,'knc.knn') def predict(img): knc=nhb.KNeighborsClassifier(algorithm='ball_tree',n_neighbors=3) knc=joblib.load('knc.knn') lines=splitchar(img,axis=1) chars=[] for line in lines: charlist=splitchar(line,axis=0) cchars=[ myResize(splitBox(c)) for c in charlist] chars.append(cchars) chars=np.asarray(chars) Y=[] for linech in chars: x=[] for ch in linech: chhog=getHog(ch) x.append(chhog) y=knc.predict(x) print(y) Y.append(y) return Y