使用树莓派摄像头识别二维码,并通过http返回结果

标签: 树莓派 python flask 摄像头
12人阅读 评论(0) 收藏 举报
分类:

树莓派接上摄像头后运行此程序,在本机电脑访问树莓派启动的web端口,可直接获取二维码扫描的结果,或者获取当前摄像头照片。

由于树莓派自带python版本是2.7,本文使用python2,python3需少量修改。

使用的库

大部分使用pip直接安装即可,具体安装方法自行搜索

  • picamera
  • flask
  • zbar
  • PIL

获取摄像头图像

下面的程序可获取当前摄像头的图像

import picamera.array
from PIL import Image

with picamera.PiCamera() as camera:
    camera.resolution = (1366, 768)
    camera.framerate = 10
    print "start preview direct from GPU"
    camera.start_preview()
    with io.BytesIO() as stream:
        camera.capture(stream, 'jpeg')
        im = Image.open(stream)

with picamera.PiCamera() as camera:打开了摄像头,这时候我们只要我们只要在这个with层级下,摄像头就不会关闭,可以一直获取图像。
而怎么让运行的时候一直保持在此层级下呢,没错答案就是让程序阻塞在此。当然不能用while True:实现阻塞,我们还要运行flask框架,我们知道flask在运行的时候是阻塞的,所以可以利用这个,让程序阻塞。

结合flask通过http返回结果

import picamera.array
import io
import base64
from cStringIO import StringIO
from PIL import Image
from flask import Flask, jsonify
import zbar

print "create app..."
app = Flask(__name__)

with picamera.PiCamera() as camera:
    camera.resolution = (1366, 768)
    camera.framerate = 10
    print "start preview direct from GPU"
    camera.start_preview()


    @app.route('/')
    def hello():
        return "hello"


    @app.route('/image')
    def get_img():
        print "---------", "start get img"
        with io.BytesIO() as stream:
            camera.capture(stream, 'jpeg')
            print "capture"
            im = Image.open(stream)
            output_buffer = StringIO()
            im.save(output_buffer, format='JPEG')
            binary_data = output_buffer.getvalue()
            base64_data = base64.b64encode(binary_data)
            print "base64:"
            return "<img width='100%' src=\"data:image/jpg;base64," + base64_data + "\">"


    @app.route('/qr')
    def get_qr():
        with io.BytesIO() as stream:
            camera.capture(stream, 'jpeg')
            im = Image.open(stream)
            # im = Image.open("Z.jpg")
            pil = im.convert('L')
            width, height = pil.size
            raw = pil.tobytes()
            image = zbar.Image(width, height, 'Y800', raw)
            scanner = zbar.ImageScanner()
            scanner.parse_config('enable')
            scanner.scan(image)
            res = []
            for symbol in image:
                print 'decoded', symbol.type, 'symbol', '"%s"' % symbol.data
                res.append({
                    "type": str(symbol.type),
                    "data": symbol.data
                })
            return jsonify({
                "status": 0,
                "data": res
            })


    app.run(host="0.0.0.0", port=8080, threaded=True)
查看评论

Sunny树莓派入门到项目

本套课程将带大家了解树莓派、配置树莓派、使用树莓派作为日常服务器、对接硬件、做智能家居小项目。每周日晚上24点更新课程,预计12月底更新完成所有课程。
  • 2017年09月28日 12:16

python实现树莓派生成并识别二维码

设备及环境 树莓派2代官方系统Raspbian官方树莓派摄像头模块 设备连接 摄像头模块插入到距离网卡口最近的那个接口,板上有Camera的字样,看清楚正反面。 启用摄像头 ...
  • huayucong
  • huayucong
  • 2016-12-20 21:11:08
  • 4234

树莓派自带摄像头OpenCV图像识别-二维码识别

1、安装树莓派镜像,SSH,VNC等这里就不介绍了很简单大家自行百度。2、我没有用VNC 所以装了teamviewer用于树莓派远程控制安装教程参考:http://blog.csdn.net/shao...
  • x115104
  • x115104
  • 2017-12-23 10:37:57
  • 460

树莓派(Debian系统)通过usb摄像头扫描识别QR二维码

树莓派(Debian系统)自带Python开发环境IDLE(Python 2.7.3),接上摄像头,就能通过Python实行对QR code的创建和识别: 首先,需要在树莓派上安装如下工具:   ...
  • huayucong
  • huayucong
  • 2015-07-22 23:20:54
  • 9414

在树莓派(Debian系统)上通过usb摄像头扫描识别QR二维码

树莓派(Debian系统)自带Python开发环境IDLE(Python 2.7.3),接上摄像头,就能通过Python实行对QR code的创建和识别...
  • Burgess_Liu
  • Burgess_Liu
  • 2014-10-23 15:28:41
  • 7096

树莓派SimpleCV识别二维码和条形码

近期准备接下来的项目,项目要用到二维码识别,故对此提前进行了相关的研究。 步骤如下: A:安装一大堆软件,按着顺序一步一步来就行了 一、安装SimpleCV,参阅http://www.eefocus....
  • Lingdongtianxia
  • Lingdongtianxia
  • 2016-10-27 21:59:49
  • 4370

html5 调用手机摄像头,拍照识别二维码

  • 2018年01月31日 20:48
  • 97KB
  • 下载

jsqrcode 通过Web摄像头识别QR二维码

  • 2013年07月21日 23:27
  • 42KB
  • 下载

python服务程序(调用摄像头查看视频和识别二维码)+ Android 客户端程序

运行效果图 服务器端程序 #!/usr/bin/python ''' 服务器端程序 do_GET() 方法调用webcam摄像头,查看监控视频,同时识别二维码,do_POST()方法连接Mys...
  • u011408270
  • u011408270
  • 2016-10-06 22:40:03
  • 1333

使用电脑摄像头识别二维码

要想摄像头识别二维码,需要两个基本功能:1、从摄像头获取图像,2、根据图片解析出二维码信息。在上一篇java摄像头截图已经实现了摄像头截图,只要再加上zxing(或其它能从图片中解析二维码的组件),就...
  • a19880813
  • a19880813
  • 2014-07-11 10:18:19
  • 1002
    个人资料
    等级:
    访问量: 459
    积分: 66
    排名: 161万+
    文章存档