• [Python+JavaScript]JS调用摄像头并拍照,上传至tornado后端并转换为PIL的Image


    最近再写一个人脸识别的程序,需要从Web前端调用摄像头拍照,然后发送给后端进行识别

    总体思路是:Web前端拍照 -> 图片转为Base64 -> 发送至tornado后端 -> 后端解码,转换回PIL的Image对象

    前端代码

    调起摄像头

    function getMedia() {
              let constraints = {
                  video: { 300, height: 300},
                  audio: false
              };
              let video = document.getElementById("video"); //这里是用作实时显示摄像头图像的canvas对象
              let promise = navigator.mediaDevices.getUserMedia(constraints);
              promise.then(function (MediaStream) {
                  video.srcObject = MediaStream;
                  video.play();
              });
          }

    拍照

    function takePhoto() {
            let video = document.getElementById("video"); //用于实时显示摄像头画面的canvas
            let canvas = document.getElementById("canvas"); //用于显示拍得照片显示的canvas
            let ctx = canvas.getContext('2d');
            ctx.drawImage(video, 0, 0, 300, 300);
            UploadFile() //拍完照片后调用上传函数
          }

    上传图片

    function UploadFile(){
                let canvas = document.getElementById('canvas');
                console.log(canvas.toDataURL('image/jpeg'))  //也可以是png
                jQuery.post('/Check', {
                  img: canvas.toDataURL('image/jpeg') //转换为Base64
                }).done(function(rs) {
                  console.log(rs);
                  document.getElementById("showName").innerHTML = rs
                }).fail(function(err) {
                  console.log(err);
                  document.getElementById("showName").innerHTML = err
                });
            }

    后端

    class Check(tornado.web.RequestHandler): 
        def get(self):
            self.write('错误的访问方式!')
    
        def post(self, *args, **kwargs):
            base64str = self.get_argument('img') //读取post参数
            base64str = base64str.replace("data:image/jpeg;base64,","") //删除编码前的标记
            imgstr = base64.b64decode(base64str) //解码
            imgio = io.BytesIO(imgstr) 
            img = Image.open(imgio) //转换回PIL的Image对象
  • 相关阅读:
    用户登录
    open >>>文件操作
    随机数
    内置函数
    函数练习
    函数的动态参数
    函数的指定参数
    函数的普通参数
    函数的初步认识
    copy
  • 原文地址:https://www.cnblogs.com/lee-li/p/10765871.html
Copyright © 2020-2023  润新知