You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

169 lines
7.2 KiB

import requests
import time
import json
import uuid
import sys
import os
import threading
# 获取分辨率索引
url = "http://localhost:6543/GetAllDisplayInfo"
param = {
"dev_idx": "0",
}
import inspect
import ctypes
# 关闭线程
def _async_raise(tid, exctype):
"""raises the exception, performs cleanup if needed"""
tid = ctypes.c_long(tid)
if not inspect.isclass(exctype):
exctype = type(exctype)
res = ctypes.pythonapi.PyThreadState_SetAsyncExc(tid, ctypes.py_object(exctype))
if res == 0:
raise ValueError("invalid thread id")
elif res != 1:
# """if it returns a number greater than one, you're in trouble,
# and you should call it again with exc=NULL to revert the effect"""
ctypes.pythonapi.PyThreadState_SetAsyncExc(tid, None)
raise SystemError("PyThreadState_SetAsyncExc failed")
def stop_thread(thread):
_async_raise(thread.ident, SystemExit)
class GaoPaiYi:
# path = "/home/yanyi/Project/MainManage/img" # 默认存储地址
path = os.path.join(os.getcwd(), "img")
if not os.path.exists(path):
os.umask(0)
os.makedirs(path)
def __init__(self):
url = "http://localhost:6543/GetAllDisplayInfo"
try:
res = requests.get(url=url) # 启动高拍仪
print(json.loads(res.text))
print(json.loads(res.text)['data'])
print(json.loads(res.text)['code'] == '0')
except:
pass
def openCamera(self):
try:
url = "http://127.0.0.1:6543/GetAllDisplayInfo"
param = {}
header = {'Content-Type': 'application/json;charset=utf-8'}
res = requests.get(url=url, data=json.dumps(param), headers=header, timeout=10)
print(json.loads(res.text))
url = 'http://127.0.0.1:6543/video=stream&camidx=0'
res = requests.get(url=url, data=json.dumps(param), headers=header, timeout=10)
print(json.loads(res.text))
print(json.loads(res.text)['filepath'])
print('打开相机:::', json.loads(res.text)['code'])
except Exception as e:
print(e)
return {'code': -1, 'msg': e}
# win 版本
# def getPic(self):
# try:
# p = threading.Thread(target=self.openCamera)
# p.start()
# time.sleep(2)
# # 摄像头拍照
# url = 'http://127.0.0.1:6543/video=grabimage'
# # url = 'https://restapi.getui.com/v2/h8m8bkLRUG6C313Xw8sNV8/auth'
# param = {
# "filepath": f"{self.path}\\{str(uuid.uuid1())}.jpg",
# "rotate": "90", #// 图像旋转角度90的整数倍默认"0"
# "deskew": "0", #// 纠偏主头有效参数0:不纠偏1:纠偏
# "deskewval":"0", #// 纠偏像素值正常给0正数时多裁负数时少裁
# "camidx": "0", #// 摄像头索引参数0:主头1:副头
# "ColorMode": "0", #// 色彩模式图片保存本地时调用。0彩色 1灰色 2黑白 3白纸印章 4去背景色(普通文件) 5:去背景色(身份证)
# "quality": "0", #// 图片质量,图片保存本地调用
# # 。0:默认质量1:高质量2:较高质量3:中质量4:较低质量5:低质量
# "bAutoAdjust":"1", #// 是否自动摆正: 0不摆正 1摆正
# "bIsPrint1to1":"", #// 是否1:1打印
# "watermark": {
# "pos": "", #// 水印在图像中的位置0:左上1:右上2:左下3:右下4:中间
# "content": "", #// 水印内容必须utf-8编码当水印内容为空将当前时间作为水印
# "transparency": "", #// 透明度0~255,0:完全透明255:不透明
# "fontsize": "", #// 字体大小默认32
# "font": "", #// 字体
# "color": "" # // 水印颜色colorname
# }
# }
# header ={'Content-Type':'application/json;charset=utf-8'}
# res = requests.post(url = url,data=json.dumps(param),headers=header)
# print(json.loads(res.text).get('filepath'))
# if json.loads(res.text)['code'] == "0":
# res_data = {'code':0,'msg':"图片保存成功","path":json.loads(res.text)['filepath'].split("\\")[-1]}
# else:
# res_data= {'code':-1, 'msg':"图片保存失败", "path":json.loads(res.text)['code']}
# print(res_data)
# # 关闭摄像头
# url = 'http://127.0.0.1:6543/video=close'
# param = {"camidx":"0"}
# header = {'Content-Type': 'application/json;charset=utf-8'}
# res = requests.post(url=url, data=json.dumps(param), headers=header,timeout=10)
# print('关闭摄像头:::::::',json.loads(res.text)['code'])
# stop_thread(thread=p)
# return res_data
# except Exception as e:
# print('报错信息: ' + e + ' ,File: ' + __file__ + ', Line ' + str(sys._getframe().f_lineno))
# return {'code':-1,'msg':e}
# # linux 版本
def getPic(self):
try:
# if path:
# self.path = path
# print('----------预览视频-------------------------')
# 打開視頻
url = "http://localhost:6543/StartPreview?dev_idx=0&res_id=0&pixfmt=pixfmt"
res = requests.get(url=url)
print(res.text)
# print(json.loads(res.text)['data'])
# print(json.loads(res.text)['code']=='0')
if json.loads(res.text)['returnCode'] != 0:
return {'code': -1, 'msg': "打开视频失败"}
time.sleep(5)
# print('----------拍照-------------------------',__file__)
# 打開視頻
url = "http://localhost:6543/getPic?savepath=" + self.path + "&quality=80"
res = requests.get(url=url)
# print(json.loads(res.text)['data']["path"])
# print(json.loads(res.text)['returnCode']==0) /home/yanyi/Project/MainManage/img/2022-9-9 15-36-35.jpg
if json.loads(res.text)['returnCode'] == 0:
res_data = {'code': 0, 'msg': "图片保存成功", "path": json.loads(res.text)['data']["path"].split("/")[-1]}
else:
res_data = {'code': -1, 'msg': "图片保存失败", "path": json.loads(res.text)['returnCode']}
# print('----------关闭视频-------------------------')
url = "http://localhost:6543/StopPreview?dev_idx=0"
res = requests.get(url=url)
return res_data
except Exception as e:
print('报错信息: ' + str(e) + ' ,File: ' + __file__ + ', Line ' + str(sys._getframe().f_lineno))
return {'code': -1, 'msg': "高拍仪连接失败,请打开高拍仪地址重新连接一下,{0}".format(str(e))}
if __name__ == "__main__":
obj = GaoPaiYi()
obj.getPic()
path = '/tmp'
# pic_url = GaoPaiYi().getPic(path)
# print(pic_url)