Python_科学计算库

说明:若没有训练级联表,则需要相关级联表才能实现功能 

文字识别

# -*- 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
数字识别
原文地址:https://www.cnblogs.com/hellangels333/p/9053682.html