pythonopencvapi
A. python安装opencv的插件失败了
升级一下numpy就可以了。
pip install numpy --upgrade
B. 学习python对计算机图形学有用么
任何语言实际上都是工具,只有顺手不顺手之分,python作为一种脚本语言,学习相对简单资料也很多,功能也很强大,主流的计算机图形学库都有python版本的api(如OpenCV),自己的库也很丰富,更重要的是可以作为各种语言之间的粘合剂来使用,也就是说可以尽量多的融合不同程序语种写出的程序到同一个项目中来,在主流的3D软件和后期软件中都以普遍支持了python作为脚本api。
传言说python执行效率不高,但我想这也分两说,因为毕竟属于脚本语言,随执行编译,多少都会有影响的,不过如果对于图形方面多是密集型运算的时候不妨单独用C++开发运算部分,python做其他管理部分还是很顺手的。
很有用,毕竟有时候也会应用在影视方面,速度也够快,维护也不像其他程序语言那样走编译流程,直接就可以执行。python是跨平台的,这点也挺重要。
C. Opencv用Python实现灰度图
请题主把两张图上传上来。具体方法:是上传到网络网盘然后链接贴过来
D. python opencv怎么创建一个cascadeobjectdetector对象
OpenCV中有两个程序可以训练级联分类器: opencv_haartraining 和opencv_traincascade。opencv_traincascade 是一个新程序,使用OpenCV 2.x API 以C++ 编写。这二者主要的区别是 opencv_traincascade 支持 Haar、Hog和 LBP(Local Binary Patterns) 三种特征,并易于增加其他的特征。与Haar特征相比,LBP特征是整数特征,因此训练和检测过程都会比Haar特征快几倍。LBP和Haar特征用于检测的准确率,是依赖训练过程中的训练数据的质量和训练参数。训练一个与基于Haar特征同样准确度的LBP的分类器是可能的。
opencv_traincascade and opencv_haartraining 所输出的分类器文件格式并不相同。注意,新的级联检测接口(参考 objdetect 模块中的 CascadeClassifier 类)支持这两种格式。 opencv_traincascade 可以旧格式导出训练好的级联分类器。但是在训练过程被中断后再重启训练过程, opencv_traincascade and opencv_haartraining 不能装载与中断前不同的文件格式。
opencv_traincascade 程序使用TBB来处理多线程。如果希望使用多核并行运算加速,请使用TBB来编译OpenCV。还有一些与训练相关的辅助程序。
E. 如何使用Python,基于OpenCV与Face++实现人脸解锁的功能
近几天微软的发布会上讲到了不少认脸解锁的内容,经过探索,其实利用手头的资源我们完全自己也可以完成这样一个过程。
本文讲解了如何使用Python,基于OpenCV与Face++实现人脸解锁的功能。
本文基于Python 2.7.11,Windows 8.1 系统。
主要内容
Windows 8.1上配置OpenCV
OpenCV的人脸检测应用
使用Face++完成人脸辨识(如果你想自己实现这部分的功能,可以借鉴例如这个项目)
获取摄像头的图片
在图片中检测到人脸的区域
在人脸的区域周围绘制方框
上传图片获取读取到的人的face_id
创建Person,获取person_id(Person中的图片可以增加、删除)
比较两个face_id,判断是否是一个人
比较face_id与person_id,判断是否是一个人
使用一个程序设置账户(包括向账户中存储解锁用的图片)
使用另一个程序登陆(根据输入的用户名测试解锁)
Windows 8.1上配置OpenCV
入门的时候配置环境总是一个非常麻烦的事情,在Windows上配置OpenCV更是如此。
既然写了这个推广的科普教程,总不能让读者卡在环境配置上吧。
下面用到的文件都可以在这里(提取码:b6ec)下载,但是注意,目前OpenCV仅支持Python2.7。
将cv2加入site-packages
将下载下来的cv2.pyd文件放入Python安装的文件夹下的Libsite-packages目录。
就我的电脑而言,这个目录就是C:/Python27/Lib/site-packages/。
记得不要直接使用pip安装,将文件拖过去即可。
安装numpy组件
在命令行下进入到下载下来的文件所在的目录(按住Shift右键有在该目录打开命令行的选项)
键入命令:
1
pip install numpy-1.11.0rc2-cp27-cp27m-win32.whl
如果你的系统或者Python不适配,可以在这里下载别的轮子。
测试OpenCV安装
在命令行键入命令:
1
python -c "import cv2"
如果没有出现错误提示,那么cv2就已经安装好了。
OpenCV的人脸检测应用
人脸检测应用,简而言之就是一个在照片里找到人脸,然后用方框框起来的过程(我们的相机经常做这件事情)
那么具体而言就是这样一个过程:
获取摄像头的图片
这里简单的讲解一下OpenCV的基本操作。
以下操作是打开摄像头的基本操作:
1
2
3
4
5
6
7
#coding=utf8
import cv2
# 一般笔记本的默认摄像头都是0
capInput = cv2.VideoCapture(0)
# 我们可以用这条命令检测摄像头是否可以读取数据
if not capInput.isOpened(): print('Capture failed because of camera')
那么怎么从摄像头读取数据呢?
1
2
3
4
5
6
7
8
# 接上段程序
# 现在摄像头已经打开了,我们可以使用这条命令读取图像
# img就是我们读取到的图像,就和我们使用open('pic.jpg', 'rb').read()读取到的数据是一样的
ret, img = capInput.read()
# 你可以使用open的方式存储,也可以使用cv2提供的方式存储
cv2.imwrite('pic.jpg', img)
# 同样,你可以使用open的方式读取,也可以使用cv2提供的方式读取
img = cv2.imread('pic.jpg')
为了方便显示图片,cv2也提供了显示图片的方法:
1
2
3
4
5
6
# 接上段程序
# 定义一个窗口,当然也可以不定义
imgWindowName = 'ImageCaptured'
imgWindow = cv2.namedWindow(imgWindowName, cv2.WINDOW_NORMAL)
# 在窗口中显示图片
cv2.imshow(imgWindowName, img)
当然在完成所有操作以后需要把摄像头和窗口都做一个释放:
1
2
3
4
5
# 接上段程序
# 释放摄像头
capInput.release()
# 释放所有窗口
cv2.destroyAllWindows()
在图片中检测到人脸的区域
OpenCV给我们提供了已经训练好的人脸的xml模板,我们只需要载入然后比对即可。
1
2
3
4
5
6
7
8
# 接上段程序
# 载入xml模板
faceCascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
# 将图形存储的方式进行转换
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 使用模板匹配图形
faces = faceCascade.detectMultiScale(gray, 1.3, 5)
print(faces)
在人脸的区域周围绘制方框
在上一个步骤中,faces中的四个量分别为左上角的横坐标、纵坐标、宽度、长度。
所以我们根据这四个量很容易的就可以绘制出方框。
1
2
3
# 接上段程序
# 函数的参数分别为:图像,左上角坐标,右下角坐标,颜色,宽度
img = cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 2)
成果
根据上面讲述的内容,我们现在已经可以完成一个简单的人脸辨认了:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#coding=utf8
import cv2
print('Press Esc to exit')
faceCascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
imgWindow = cv2.namedWindow('FaceDetect', cv2.WINDOW_NORMAL)
def detect_face():
capInput = cv2.VideoCapture(0)
# 避免处理时间过长造成画面卡顿
nextCaptureTime = time.time()
faces = []
if not capInput.isOpened(): print('Capture failed because of camera')
while 1:
ret, img = capInput.read()
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
if nextCaptureTime < time.time():
nextCaptureTime = time.time() + 0.1
faces = faceCascade.detectMultiScale(gray, 1.3, 5)
if faces:
for x, y, w, h in faces:
img = cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 2)
cv2.imshow('FaceDetect', img)
# 这是简单的读取键盘输入,27即Esc的acsii码
if cv2.waitKey(1) & 0xFF == 27: break
capInput.release()
cv2.destroyAllWindows()
if __name__ == '__main__':
detect_face()
使用Face++完成人脸辨识
第一次认识Face++还是因为支付宝的人脸支付,响应速度还是非常让人满意的。
现在只需要免费注册一个账号然后新建一个应用就可以使用了,非常方便。
他的官方网址是这个,注册好之后在这里的我的应用中创建应用即可。
创建好应用之后你会获得API Key与API Secret。
Face++的API调用逻辑简单来说是这样的:
上传图片获取face_id
在将图片通过post方法上传到特定的地址后将返回一个json的值。
如果api_key, api_secret没有问题,且在上传的图片中有识别到人脸,那么会存储在json的face键值下。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#coding=utf8
import requests
# 这里填写你的应用的API Key与API Secret
API_KEY = ''
API_SECRET = ''
# 目前的API网址是这个,你可以在API文档里找到这些
BASE_URL = 'httlus.com/v2'
# 使用Requests上传图片
url = '%s/detection/detect?api_key=%s&api_secret=%s&attribute=none'%(
BASE_URL, API_KEY, API_SECRET)
files = {'img': (os.path.basename(fileDir), open(fileDir, 'rb'),
mimetypes.guess_type(fileDir)[0]), }
r = requests.post(url, files = files)
# 如果读取到图片中的头像则输出他们,其中的'face_id'就是我们所需要的值
faces = r.json().get('face')
print faces
创建Person
这个操作没有什么可以讲的内容,可以对照这段程序和官方的API介绍。
官方的API介绍可以见这里,相信看完这一段程序以后你就可以自己完成其余的API了。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 上接上一段程序
# 读取face_id
if not faces is None: faceIdList = [face['face_id'] for face in faces]
# 使用Requests创建Person
url = '%s/person/create'%BASE_URL
params = {
'api_key': API_KEY,
'api_secret': API_SECRET,
'person_name': 'LittleCoder',
'face_id': ','.join(faceIdList), }
r = requests.get(url, params = params)
# 获取person_id
print r.json.()['person_id']
进度确认
到目前为止,你应该已经可以就给定的两张图片比对是否是同一个人了。
那么让我们来试着写一下这个程序吧,两张图片分别为’pic1.jpg’, ‘pic2.jpg’好了。
下面我给出了我的代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
def upload_img(fileDir, oneface = True):
url = '%s/detection/detect?api_key=%s&api_secret=%s&attribute=none'%(
BASE_URL, API_KEY, API_SECRET)
if oneface: url += '&mode=oneface'
files = {'img': (os.path.basename(fileDir), open(fileDir, 'rb'),
mimetypes.guess_type(fileDir)[0]), }
r = requests.post(url, files = files)
faces = r.json().get('face')
if faces is None:
print('There is no face found in %s'%fileDir)
else:
return faces[0]['face_id']
def compare(faceId1, faceId2):
url = '%s/recognition/compare'%BASE_URL
params = BASE_PARAMS
params['face_id1'] = faceId1
params['face_id2'] = faceId2
r = requests.get(url, params)
return r.json()
faceId1 = upload_img('pic1.jpg')
faceId2 = upload_img('pic2.jpg')
if face_id1 and face_id2:
print(compare(faceId1, faceId2))
else:
print('Please change two pictures')
成品
到此,所有的知识介绍都结束了,相比大致如何完成这个项目各位读者也已经有想法了吧。
下面我们需要构思一下人脸解锁的思路,大致而言是这样的:
这里会有很多重复的代码,就不再赘述了,你可以在这里或者这里(提取码:c073)下载源代码测试使用。
这里是设置账户的截图:
登陆
结束语
希望读完这篇文章能对你有帮助,有什么不足之处万望指正(鞠躬)。
F. opencv是干什么的
OpenCV是一款由Intel公司俄罗斯团队发起并参与和维护的一个计算机视觉处理开源软件库,支持与计算机视觉和机器学习相关的众多算法,并且正在日益扩展。
OpenCV基于C++实现,同时提供python, Ruby, Matlab等语言的接口。OpenCV-Python是OpenCV的Python API,结合了OpenCV C++ API和Python语言的最佳特性。
作用:
OpenCV是一个基于BSD许可发行的跨平台计算机视觉库,可以运行在Linux、Windows和Mac OS操作系统上。OpenCV在计算机视觉的发展中发挥了重要的作用,使成千上万的人能够在视觉上做更多的工作。OpenCV允许学生,研究人员,专业人员和创业者高效地实施项目,并通过向他们提供可在多种平台上优化的计算机视觉架构。
G. python里的opencv用法和c一样吗在哪里看用法呢
opencv的api对于每种语言都是一样的啊。
pyhton中opencv的用法在官网有说明文档。你可以去看看。
官方文档:http://docs.opencv.org/trunk/doc/py_tutorials/py_tutorials.html
国内也有人写了些使用经验:http://www.cnblogs.com/cutepig/archive/2009/04/17/1437653.html
H. 如何重新编译opencv python
GCC 5.4.0
CMAKE 3.5.1
OpenCV 3.1.0
Android SDK API 23(Android 6.0)
Androird NDK r12b(12.1.2977051)
Python 2.7.12
当然在编译过程中还会用到很多其他工具和软件包,比如Ninja,Ant等,我会在文中需要的时候给出它们的版本和安装方法。
关于GCC,CMAKE和Python的安装过程本文就不详述了,一是因为这些工具的安装过程很容易,网络上的介绍都很详细,二是因为之前刚刚配置好TensorFlow,安装了一大堆软件包,我也不清楚本文的内容究竟会涉及哪些依赖库,我会尽量把我在编译过程中所需的工具和库标记出来。
I. Python和opencv怎么用,求用图解释
opencv显示图像要把图像放在工程文件的debug 目录里; OpenCV的全称是:Open Source Computer Vision Library。OpenCV是一个基于(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows和Mac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。 OpenCV用C++语言编写,它的主要接口也是C++语言,但是依然保留了大量的C语言接口。该库也有大量的Python, Java and MATLAB/OCTAVE (版本2.5)的接口。这些语言的API接口函数可以通过在线文档获得。如今也提供对于C#,Ch, Ruby的支持。
J. python+opencv 怎么实现一个和vision.cascadeobjectdetector一样的对象
OpenCV中有两个程序可以训练级联分类器: opencv_haartraining 和opencv_traincascade。opencv_traincascade 是一个新程序,使用OpenCV 2.x API 以C++ 编写。这二者主要的区别是 opencv_traincascade 支持 Haar、Hog和 LBP(Local Binary Pattern...