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
数字识别
Python_科学计算库的更多相关文章
- Python_科学计算平台__pypi体系的numpy、scipy、pandas、matplotlib库简介
1.numpy--基础,以矩阵为基础的数学计算模块,纯数学 存储和处理大型矩阵. 这个是很基础的扩展,其余的扩展都是以此为基础. 快速学习入口 https://docs.scipy.org/doc/n ...
- SciPy - 科学计算库(上)
SciPy - 科学计算库(上) 一.实验说明 SciPy 库建立在 Numpy 库之上,提供了大量科学算法,主要包括这些主题: 特殊函数 (scipy.special) 积分 (scipy.inte ...
- python科学计算库的numpy基础知识,完美抽象多维数组(原创)
#导入科学计算库 #起别名避免重名 import numpy as np #小技巧:从外往内看==从左往右看 从内往外看==从右往左看 #打印版本号 print(np.version.version) ...
- python科学计算库numpy和绘图库PIL的结合,素描图片(原创)
# 导入绘图库 from PIL import Image #导入科学计算库 import numpy as np #封装一个图像处理工具类 class TestNumpy(object): def ...
- numpy科学计算库的基础用法,完美抽象多维数组(原创)
#起别名避免重名 import numpy as np #小技巧:print从外往内看==shape从左往右看 if __name__ == "__main__": print(' ...
- Python科学计算库
Python科学计算库 一.numpy库和matplotlib库的学习 (1)numpy库介绍:科学计算包,支持N维数组运算.处理大型矩阵.成熟的广播函数库.矢量运算.线性代数.傅里叶变换.随机数生成 ...
- ubuntu14.04 下安装 gsl 科学计算库
GSL(GNU Scientific Library)作为三大科学计算库之一,除了涵盖基本的线性代数,微分方程,积分,随机数,组合数,方程求根,多项式求根,排序等,还有模拟退火,快速傅里叶变换,小波, ...
- windows下如何快速优雅的使用python的科学计算库?
Python是一种强大的编程语言,其提供了很多用于科学计算的模块,常见的包括numpy.scipy.pandas和matplotlib.要利用Python进行科学计算,就需要一一安装所需的模块,而这些 ...
- Python科学计算库Numpy
Python科学计算库Numpy NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库. 1.简 ...
随机推荐
- 利用Image对象,建立Javascript前台错误日志记录
手记:摘自Javascript高级程序设计(第三版),利用Image对象发送请求,确实有很多优点,有时候这也许就是一个创意点,再次做个笔记供自己和大家参考. 原文: 开发 Web 应用程序过程中的一种 ...
- centos8安装fastdfs6.06集群方式一之:软件下载与安装
一,查看本地centos的版本 [root@localhost lib]# cat /etc/redhat-release CentOS Linux release 8.1.1911 (Core) 说 ...
- Apache Hudi助力nClouds加速数据交付
1. 概述 在nClouds上,当客户的业务决策取决于对近实时数据的访问时,客户通常会向我们寻求有关数据和分析平台的解决方案.但随着每天创建和收集的数据量都在增加,这使得使用传统技术进行数据分析成为一 ...
- python第三章:函数
在前面章节中,介绍了一些input(),print(),len()等内建函数,还有random,math等标准库相关函数,这些都是可以直接使用的,但是很多时候,我们也是可以编写自己的函数. 看个例子: ...
- Python语言应用解析,如何入门学Python?
Python在机器学习人工智能领域非常流行,可以说是算法工程师的标配编程语言.Python语言广泛应用在web开发.大数据开发.人工智能开发.机器学习.后端开发等领域之中,近几年Python语言的趋势 ...
- ORA-28000错误解决方案
当使用SQL*Plus登录时,Oracle数据库时提示"ORA-28000:帐号被锁定". 导致出现改错误的原因是:在oracle database 11g中,默认在default ...
- Hbase实用技巧:全量+增量数据的迁移方法
摘要:本文介绍了一种Hbase迁移的方法,可以在一些特定场景下运用. 背景 在Hbase使用过程中,使用的Hbase集群经常会因为某些原因需要数据迁移.大多数情况下,可以跟用户协商用离线的方式进行迁移 ...
- css3滚动条样式美化
关于滚动条的设计,需要用到css3的微元素,都列在下边吧(以Chrome内核webkit为例). -webkit-scrollbar 滚动条的整体轮廓,width表示纵向滚动条的宽度,heig ...
- STM32入门系列-使用C语言封装寄存器
前面文章介绍了存储器映射.寄存器和寄存器映射,这些都是为了介绍使用 C语言封装寄存器做铺垫.这里我们通过一个实例来对 C 语言封装寄存器进行介绍. 具体实例:控制 GPIOC 端口的第 0 管脚输出一 ...
- Windows炫酷桌面钢铁侠主题 雨滴 Rainmeter
首先附上我现在的这个桌面,喜欢的话可以直接使用,我在公众号中设置了回复,[雨滴桌面下载]可以查看下载链接. 介绍一下我们用的工具. Rainmeter 雨滴程序 喜欢的人有研究应该都知道这个程序 这里 ...