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

本文主要是介绍python服务程序(调用摄像头查看视频和识别二维码)+ Android 客户端程序,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

运行效果图
这里写图片描述
这里写图片描述

服务器端程序

#!/usr/bin/python
'''
服务器端程序 do_GET() 方法调用webcam摄像头,查看监控视频,同时识别二维码,do_POST()方法连接Mysql数据库,获取数据,并以webservice的形式发布出去供移动客户端与Mysql数据交互。
'''
import cv2
import Image
import threading
from BaseHTTPServer import BaseHTTPRequestHandler,HTTPServer
from SocketServer import ThreadingMixIn
import StringIO
import time
import qrtools
import serial
import MySQLdb
import datetime
import cgi
import random
import stringcapture = None
qr = qrtools.QR()
sr = serial.Serial('/dev/ttyACM0', baudrate=9600, timeout=1)
db = MySQLdb.connect('localhost', 'root', 'root', 'homedb')
cursor = db.cursor()def passwd_generator():s = string.ascii_letters + string.digitsl = len(s)passwd_l = 10return ''.join([s[random.randrange(0, l-1)] for x in range(passwd_l)])class CamHandler(BaseHTTPRequestHandler):def do_GET(self):if self.path.endswith('.mjpg'):self.send_response(200)self.send_header('Content-type','multipart/x-mixed-replace; boundary=--jpgboundary')self.end_headers()while True:try:rc, img = capture.read()if not rc:continueimgRGB = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)jpg = Image.fromarray(imgRGB)tmpFile = StringIO.StringIO()jpg.save(tmpFile,'JPEG')if qr.decode(tmpFile):print(qr.data)''' Verify QR code '''username, passwd = qr.data.trim().split(',')cursor.execute('select * from user where username="' + qr.username + '"')data = cursor.fetchone()if not data:continued = datetime.datetime.now() - data[3]if d < datetime.delta(seconds=10):if passwd == data[2]:''' Open lock via arduino'''if sr.isOpen():sr.write(b'1')self.wfile.write("--jpgboundary")self.send_header('Content-type','image/jpeg')self.send_header('Content-length',str(tmpFile.len))self.end_headers()jpg.save(self.wfile,'JPEG')time.sleep(0.05)except KeyboardInterrupt:breakreturnif self.path.endswith('.html'):self.send_response(200)self.send_header('Content-type','text/html')self.end_headers()with open('front.html', 'r') as f:self.wfile.write(f.read());# self.wfile.write('<html><head></head><body>')self.wfile.write('<img class="img-responsive" src="http://192.168.1.201:8800/cam.mjpg"/>')# self.wfile.write('</body></html>')with open('end.html', 'r') as f:self.wfile.write(f.read())returndef do_POST(self):if self.path == '/authenticate':ctype, pdict = cgi.parse_header(self.headers.getheader('content-type'))if ctype == 'multipart/form-data':postvars = cgi.parse_multipart(self.rfile, pdict)elif ctype == 'application/x-www-form-urlencoded':length = int(self.headers.getheader('content-length'))postvars = cgi.parse_qs(self.rfile.read(length), keep_blank_values=1)else:postvars = {}if postvars:username = postvars['username'][0]print("username=" + username)cursor.execute('select * from user where username=%s', (username, ))d = cursor.fetchone()if d:new_passwd = passwd_generator()print("new passwd=" + new_passwd)# cursor.execute('select * from user')cursor.execute('update user set passwd=%s, last_update=%s where username=%s', (new_passwd, datetime.datetime.now(), username))db.commit()if cursor:self.send_response(200)self.end_headers()self.wfile.write(username + ',' + new_passwd)print("response OK!")returnelse:self.send_response(200)self.send_header('Content-type', 'text/html')self.end_headers()self.wfile.write('<htm><body>Hello world</body></html>')returnclass ThreadedHTTPServer(ThreadingMixIn, HTTPServer):"""Handle requests in a separate thread."""def main():global captureglobal qrglobal srglobal cursorcapture = cv2.VideoCapture(0)capture.set(cv2.CAP_PROP_FRAME_WIDTH, 960);capture.set(cv2.CAP_PROP_FRAME_HEIGHT, 544);capture.set(cv2.CAP_PROP_SATURATION,0.2);global imgtry:server = ThreadedHTTPServer(('192.168.1.201', 8800), CamHandler)print "server started"server.serve_forever()except KeyboardInterrupt:capture.release()server.socket.close()cursor.close()db.close()if __name__ == '__main__':main()

Android 手机客户端程序

Activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"tools:context="com.example.king.httppostdemo.MainActivity"android:orientation="vertical"><Button
        android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Click"android:id="@+id/button"android:layout_alignTop="@+id/text1"android:layout_alignParentLeft="true"android:layout_alignParentStart="true" /><TextView
        android:id="@+id/text1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Hello World!" />
</LinearLayout>

MainActivity.java

package com.example.king.httppostdemo;import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;import java.util.HashMap;public class MainActivity extends Activity {private TextView tv1;private Button bt;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);tv1=(TextView)findViewById(R.id.text1);bt=(Button)findViewById(R.id.button);bt.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {HashMap<String, String> data = new HashMap<String, String>();data.put("username", "hello");AsyncHttpPost asyncHttpPost = new AsyncHttpPost(data);asyncHttpPost.setListener(new AsyncHttpPost.Listener(){@Overridepublic void onResult(String result) {// do something, using return value from networktv1.setText(result);}});asyncHttpPost.execute("http://192.168.1.201:8800/authenticate");}});}}

asyncHttpPost.class

package com.example.king.httppostdemo;import android.os.AsyncTask;import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.StatusLine;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;/*** Created by king on 16-10-6.*/
class AsyncHttpPost extends AsyncTask<String, String, String> {interface Listener {void onResult(String result);}private Listener mListener;private HashMap<String, String> mData = null;// post data/*** constructor*/public AsyncHttpPost(HashMap<String, String> data) {mData = data;}public void setListener(Listener listener) {mListener = listener;}/*** background*/@Overrideprotected String doInBackground(String... params) {byte[] result = null;String str = "";HttpClient client = new DefaultHttpClient();HttpPost post = new HttpPost(params[0]);// in this case, params[0] is URLtry {// set up post dataArrayList<NameValuePair> nameValuePair = new ArrayList<NameValuePair>();Iterator<String> it = mData.keySet().iterator();while (it.hasNext()) {String key = it.next();nameValuePair.add(new BasicNameValuePair(key, mData.get(key)));}post.setEntity(new UrlEncodedFormEntity(nameValuePair, "UTF-8"));HttpResponse response = client.execute(post);StatusLine statusLine = response.getStatusLine();if(statusLine.getStatusCode() == HttpURLConnection.HTTP_OK){result = EntityUtils.toByteArray(response.getEntity());str = new String(result, "UTF-8");}}catch (UnsupportedEncodingException e) {e.printStackTrace();}catch (Exception e) {}return str;}/*** on getting result*/@Overrideprotected void onPostExecute(String result) {// something...if (mListener != null) {mListener.onResult(result);}}
}

源码(click here)

这篇关于python服务程序(调用摄像头查看视频和识别二维码)+ Android 客户端程序的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1039097

相关文章

流媒体平台/视频监控/安防视频汇聚EasyCVR播放暂停后视频画面黑屏是什么原因?

视频智能分析/视频监控/安防监控综合管理系统EasyCVR视频汇聚融合平台,是TSINGSEE青犀视频垂直深耕音视频流媒体技术、AI智能技术领域的杰出成果。该平台以其强大的视频处理、汇聚与融合能力,在构建全栈视频监控系统中展现出了独特的优势。视频监控管理系统EasyCVR平台内置了强大的视频解码、转码、压缩等技术,能够处理多种视频流格式,并以多种格式(RTMP、RTSP、HTTP-FLV、WebS

python: 多模块(.py)中全局变量的导入

文章目录 global关键字可变类型和不可变类型数据的内存地址单模块(单个py文件)的全局变量示例总结 多模块(多个py文件)的全局变量from x import x导入全局变量示例 import x导入全局变量示例 总结 global关键字 global 的作用范围是模块(.py)级别: 当你在一个模块(文件)中使用 global 声明变量时,这个变量只在该模块的全局命名空

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

阿里开源语音识别SenseVoiceWindows环境部署

SenseVoice介绍 SenseVoice 专注于高精度多语言语音识别、情感辨识和音频事件检测多语言识别: 采用超过 40 万小时数据训练,支持超过 50 种语言,识别效果上优于 Whisper 模型。富文本识别:具备优秀的情感识别,能够在测试数据上达到和超过目前最佳情感识别模型的效果。支持声音事件检测能力,支持音乐、掌声、笑声、哭声、咳嗽、喷嚏等多种常见人机交互事件进行检测。高效推

如何在页面调用utility bar并传递参数至lwc组件

1.在app的utility item中添加lwc组件: 2.调用utility bar api的方式有两种: 方法一,通过lwc调用: import {LightningElement,api ,wire } from 'lwc';import { publish, MessageContext } from 'lightning/messageService';import Ca

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

Android实现任意版本设置默认的锁屏壁纸和桌面壁纸(两张壁纸可不一致)

客户有些需求需要设置默认壁纸和锁屏壁纸  在默认情况下 这两个壁纸是相同的  如果需要默认的锁屏壁纸和桌面壁纸不一样 需要额外修改 Android13实现 替换默认桌面壁纸: 将图片文件替换frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.*  (注意不能是bmp格式) 替换默认锁屏壁纸: 将图片资源放入vendo

Android平台播放RTSP流的几种方案探究(VLC VS ExoPlayer VS SmartPlayer)

技术背景 好多开发者需要遴选Android平台RTSP直播播放器的时候,不知道如何选的好,本文针对常用的方案,做个大概的说明: 1. 使用VLC for Android VLC Media Player(VLC多媒体播放器),最初命名为VideoLAN客户端,是VideoLAN品牌产品,是VideoLAN计划的多媒体播放器。它支持众多音频与视频解码器及文件格式,并支持DVD影音光盘,VCD影

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学