测试抓图识别
This commit is contained in:
parent
568d6545d0
commit
2d3e91d7e4
|
@ -10,6 +10,11 @@ service Helmet_Reg {
|
||||||
rpc sendHelmet_Info(JinYu_Request) returns (BHhelmet_Response){}
|
rpc sendHelmet_Info(JinYu_Request) returns (BHhelmet_Response){}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
service Fire_Reg {
|
||||||
|
rpc sendFire_Info(JinYu_Request) returns (BHFire_Response){}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
message JinYu_Request {
|
message JinYu_Request {
|
||||||
int64 zzid = 1; //业务唯一ID
|
int64 zzid = 1; //业务唯一ID
|
||||||
string imgsbase64 = 2 ; //图像Base64字符串
|
string imgsbase64 = 2 ; //图像Base64字符串
|
||||||
|
@ -17,10 +22,17 @@ message JinYu_Request {
|
||||||
}
|
}
|
||||||
|
|
||||||
message BHhelmet_Response {
|
message BHhelmet_Response {
|
||||||
int64 zzid = 1; //业务唯一ID
|
int64 zzid = 1; //业务唯一ID
|
||||||
repeated HelmetInfo helmetinfoList = 2; //0:带安全帽 1:未带安全帽 2:未知
|
repeated HelmetInfo helmetinfoList = 2; //0:带安全帽 1:未带安全帽 2:未知
|
||||||
}
|
}
|
||||||
|
|
||||||
|
message BHFire_Response {
|
||||||
|
int64 zzid = 1; //业务唯一ID
|
||||||
|
repeated FireInfo FireinfoList = 2; //0:灭火器 1:气瓶
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
message Point {
|
message Point {
|
||||||
double x = 1; //x坐标
|
double x = 1; //x坐标
|
||||||
double y = 2; //y坐标
|
double y = 2; //y坐标
|
||||||
|
@ -35,4 +47,10 @@ message HelmetInfo {
|
||||||
int64 head_helmet = 1; //戴头盔
|
int64 head_helmet = 1; //戴头盔
|
||||||
double conf = 2; //置信度
|
double conf = 2; //置信度
|
||||||
Rectangle coord = 3; //矩形坐标
|
Rectangle coord = 3; //矩形坐标
|
||||||
|
}
|
||||||
|
|
||||||
|
message FireInfo {
|
||||||
|
int64 fire = 1; //类别:0:灭火器 1:气瓶
|
||||||
|
double conf = 2; //置信度
|
||||||
|
Rectangle coord = 3; //矩形坐标
|
||||||
}
|
}
|
|
@ -14,15 +14,17 @@ _sym_db = _symbol_database.Default()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x11\x42\x65iHangGrpc.proto\"A\n\rJinYu_Request\x12\x0c\n\x04zzid\x18\x01 \x01(\x03\x12\x12\n\nimgsbase64\x18\x02 \x01(\t\x12\x0e\n\x06imgUrl\x18\x03 \x01(\t\"F\n\x11\x42Hhelmet_Response\x12\x0c\n\x04zzid\x18\x01 \x01(\x03\x12#\n\x0ehelmetinfoList\x18\x02 \x03(\x0b\x32\x0b.HelmetInfo\"\x1d\n\x05Point\x12\t\n\x01x\x18\x01 \x01(\x01\x12\t\n\x01y\x18\x02 \x01(\x01\":\n\tRectangle\x12\x15\n\x05uleft\x18\x01 \x01(\x0b\x32\x06.Point\x12\x16\n\x06lright\x18\x02 \x01(\x0b\x32\x06.Point\"J\n\nHelmetInfo\x12\x13\n\x0bhead_helmet\x18\x01 \x01(\x03\x12\x0c\n\x04\x63onf\x18\x02 \x01(\x01\x12\x19\n\x05\x63oord\x18\x03 \x01(\x0b\x32\n.Rectangle2E\n\nHelmet_Reg\x12\x37\n\x0fsendHelmet_Info\x12\x0e.JinYu_Request\x1a\x12.BHhelmet_Response\"\x00\x42,\n\x17\x63om.lyzh.aiservice.grpcB\x0c\x42\x65iHangProtoP\x01\x88\x01\x01\x62\x06proto3')
|
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x11\x42\x65iHangGrpc.proto\"A\n\rJinYu_Request\x12\x0c\n\x04zzid\x18\x01 \x01(\x03\x12\x12\n\nimgsbase64\x18\x02 \x01(\t\x12\x0e\n\x06imgUrl\x18\x03 \x01(\t\"F\n\x11\x42Hhelmet_Response\x12\x0c\n\x04zzid\x18\x01 \x01(\x03\x12#\n\x0ehelmetinfoList\x18\x02 \x03(\x0b\x32\x0b.HelmetInfo\"@\n\x0f\x42HFire_Response\x12\x0c\n\x04zzid\x18\x01 \x01(\x03\x12\x1f\n\x0c\x46ireinfoList\x18\x02 \x03(\x0b\x32\t.FireInfo\"\x1d\n\x05Point\x12\t\n\x01x\x18\x01 \x01(\x01\x12\t\n\x01y\x18\x02 \x01(\x01\":\n\tRectangle\x12\x15\n\x05uleft\x18\x01 \x01(\x0b\x32\x06.Point\x12\x16\n\x06lright\x18\x02 \x01(\x0b\x32\x06.Point\"J\n\nHelmetInfo\x12\x13\n\x0bhead_helmet\x18\x01 \x01(\x03\x12\x0c\n\x04\x63onf\x18\x02 \x01(\x01\x12\x19\n\x05\x63oord\x18\x03 \x01(\x0b\x32\n.Rectangle\"A\n\x08\x46ireInfo\x12\x0c\n\x04\x66ire\x18\x01 \x01(\x03\x12\x0c\n\x04\x63onf\x18\x02 \x01(\x01\x12\x19\n\x05\x63oord\x18\x03 \x01(\x0b\x32\n.Rectangle2E\n\nHelmet_Reg\x12\x37\n\x0fsendHelmet_Info\x12\x0e.JinYu_Request\x1a\x12.BHhelmet_Response\"\x00\x32?\n\x08\x46ire_Reg\x12\x33\n\rsendFire_Info\x12\x0e.JinYu_Request\x1a\x10.BHFire_Response\"\x00\x42,\n\x17\x63om.lyzh.aiservice.grpcB\x0c\x42\x65iHangProtoP\x01\x88\x01\x01\x62\x06proto3')
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
_JINYU_REQUEST = DESCRIPTOR.message_types_by_name['JinYu_Request']
|
_JINYU_REQUEST = DESCRIPTOR.message_types_by_name['JinYu_Request']
|
||||||
_BHHELMET_RESPONSE = DESCRIPTOR.message_types_by_name['BHhelmet_Response']
|
_BHHELMET_RESPONSE = DESCRIPTOR.message_types_by_name['BHhelmet_Response']
|
||||||
|
_BHFIRE_RESPONSE = DESCRIPTOR.message_types_by_name['BHFire_Response']
|
||||||
_POINT = DESCRIPTOR.message_types_by_name['Point']
|
_POINT = DESCRIPTOR.message_types_by_name['Point']
|
||||||
_RECTANGLE = DESCRIPTOR.message_types_by_name['Rectangle']
|
_RECTANGLE = DESCRIPTOR.message_types_by_name['Rectangle']
|
||||||
_HELMETINFO = DESCRIPTOR.message_types_by_name['HelmetInfo']
|
_HELMETINFO = DESCRIPTOR.message_types_by_name['HelmetInfo']
|
||||||
|
_FIREINFO = DESCRIPTOR.message_types_by_name['FireInfo']
|
||||||
JinYu_Request = _reflection.GeneratedProtocolMessageType('JinYu_Request', (_message.Message,), {
|
JinYu_Request = _reflection.GeneratedProtocolMessageType('JinYu_Request', (_message.Message,), {
|
||||||
'DESCRIPTOR' : _JINYU_REQUEST,
|
'DESCRIPTOR' : _JINYU_REQUEST,
|
||||||
'__module__' : 'BeiHangGrpc_pb2'
|
'__module__' : 'BeiHangGrpc_pb2'
|
||||||
|
@ -37,6 +39,13 @@ BHhelmet_Response = _reflection.GeneratedProtocolMessageType('BHhelmet_Response'
|
||||||
})
|
})
|
||||||
_sym_db.RegisterMessage(BHhelmet_Response)
|
_sym_db.RegisterMessage(BHhelmet_Response)
|
||||||
|
|
||||||
|
BHFire_Response = _reflection.GeneratedProtocolMessageType('BHFire_Response', (_message.Message,), {
|
||||||
|
'DESCRIPTOR' : _BHFIRE_RESPONSE,
|
||||||
|
'__module__' : 'BeiHangGrpc_pb2'
|
||||||
|
# @@protoc_insertion_point(class_scope:BHFire_Response)
|
||||||
|
})
|
||||||
|
_sym_db.RegisterMessage(BHFire_Response)
|
||||||
|
|
||||||
Point = _reflection.GeneratedProtocolMessageType('Point', (_message.Message,), {
|
Point = _reflection.GeneratedProtocolMessageType('Point', (_message.Message,), {
|
||||||
'DESCRIPTOR' : _POINT,
|
'DESCRIPTOR' : _POINT,
|
||||||
'__module__' : 'BeiHangGrpc_pb2'
|
'__module__' : 'BeiHangGrpc_pb2'
|
||||||
|
@ -58,7 +67,15 @@ HelmetInfo = _reflection.GeneratedProtocolMessageType('HelmetInfo', (_message.Me
|
||||||
})
|
})
|
||||||
_sym_db.RegisterMessage(HelmetInfo)
|
_sym_db.RegisterMessage(HelmetInfo)
|
||||||
|
|
||||||
|
FireInfo = _reflection.GeneratedProtocolMessageType('FireInfo', (_message.Message,), {
|
||||||
|
'DESCRIPTOR' : _FIREINFO,
|
||||||
|
'__module__' : 'BeiHangGrpc_pb2'
|
||||||
|
# @@protoc_insertion_point(class_scope:FireInfo)
|
||||||
|
})
|
||||||
|
_sym_db.RegisterMessage(FireInfo)
|
||||||
|
|
||||||
_HELMET_REG = DESCRIPTOR.services_by_name['Helmet_Reg']
|
_HELMET_REG = DESCRIPTOR.services_by_name['Helmet_Reg']
|
||||||
|
_FIRE_REG = DESCRIPTOR.services_by_name['Fire_Reg']
|
||||||
if _descriptor._USE_C_DESCRIPTORS == False:
|
if _descriptor._USE_C_DESCRIPTORS == False:
|
||||||
|
|
||||||
DESCRIPTOR._options = None
|
DESCRIPTOR._options = None
|
||||||
|
@ -67,12 +84,18 @@ if _descriptor._USE_C_DESCRIPTORS == False:
|
||||||
_JINYU_REQUEST._serialized_end=86
|
_JINYU_REQUEST._serialized_end=86
|
||||||
_BHHELMET_RESPONSE._serialized_start=88
|
_BHHELMET_RESPONSE._serialized_start=88
|
||||||
_BHHELMET_RESPONSE._serialized_end=158
|
_BHHELMET_RESPONSE._serialized_end=158
|
||||||
_POINT._serialized_start=160
|
_BHFIRE_RESPONSE._serialized_start=160
|
||||||
_POINT._serialized_end=189
|
_BHFIRE_RESPONSE._serialized_end=224
|
||||||
_RECTANGLE._serialized_start=191
|
_POINT._serialized_start=226
|
||||||
_RECTANGLE._serialized_end=249
|
_POINT._serialized_end=255
|
||||||
_HELMETINFO._serialized_start=251
|
_RECTANGLE._serialized_start=257
|
||||||
_HELMETINFO._serialized_end=325
|
_RECTANGLE._serialized_end=315
|
||||||
_HELMET_REG._serialized_start=327
|
_HELMETINFO._serialized_start=317
|
||||||
_HELMET_REG._serialized_end=396
|
_HELMETINFO._serialized_end=391
|
||||||
|
_FIREINFO._serialized_start=393
|
||||||
|
_FIREINFO._serialized_end=458
|
||||||
|
_HELMET_REG._serialized_start=460
|
||||||
|
_HELMET_REG._serialized_end=529
|
||||||
|
_FIRE_REG._serialized_start=531
|
||||||
|
_FIRE_REG._serialized_end=594
|
||||||
# @@protoc_insertion_point(module_scope)
|
# @@protoc_insertion_point(module_scope)
|
|
@ -64,3 +64,64 @@ class Helmet_Reg(object):
|
||||||
BeiHangGrpc__pb2.BHhelmet_Response.FromString,
|
BeiHangGrpc__pb2.BHhelmet_Response.FromString,
|
||||||
options, channel_credentials,
|
options, channel_credentials,
|
||||||
insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
|
insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
|
||||||
|
|
||||||
|
|
||||||
|
class Fire_RegStub(object):
|
||||||
|
"""Missing associated documentation comment in .proto file."""
|
||||||
|
|
||||||
|
def __init__(self, channel):
|
||||||
|
"""Constructor.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
channel: A grpc.Channel.
|
||||||
|
"""
|
||||||
|
self.sendFire_Info = channel.unary_unary(
|
||||||
|
'/Fire_Reg/sendFire_Info',
|
||||||
|
request_serializer=BeiHangGrpc__pb2.JinYu_Request.SerializeToString,
|
||||||
|
response_deserializer=BeiHangGrpc__pb2.BHFire_Response.FromString,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class Fire_RegServicer(object):
|
||||||
|
"""Missing associated documentation comment in .proto file."""
|
||||||
|
|
||||||
|
def sendFire_Info(self, request, context):
|
||||||
|
"""Missing associated documentation comment in .proto file."""
|
||||||
|
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
|
||||||
|
context.set_details('Method not implemented!')
|
||||||
|
raise NotImplementedError('Method not implemented!')
|
||||||
|
|
||||||
|
|
||||||
|
def add_Fire_RegServicer_to_server(servicer, server):
|
||||||
|
rpc_method_handlers = {
|
||||||
|
'sendFire_Info': grpc.unary_unary_rpc_method_handler(
|
||||||
|
servicer.sendFire_Info,
|
||||||
|
request_deserializer=BeiHangGrpc__pb2.JinYu_Request.FromString,
|
||||||
|
response_serializer=BeiHangGrpc__pb2.BHFire_Response.SerializeToString,
|
||||||
|
),
|
||||||
|
}
|
||||||
|
generic_handler = grpc.method_handlers_generic_handler(
|
||||||
|
'Fire_Reg', rpc_method_handlers)
|
||||||
|
server.add_generic_rpc_handlers((generic_handler,))
|
||||||
|
|
||||||
|
|
||||||
|
# This class is part of an EXPERIMENTAL API.
|
||||||
|
class Fire_Reg(object):
|
||||||
|
"""Missing associated documentation comment in .proto file."""
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def sendFire_Info(request,
|
||||||
|
target,
|
||||||
|
options=(),
|
||||||
|
channel_credentials=None,
|
||||||
|
call_credentials=None,
|
||||||
|
insecure=False,
|
||||||
|
compression=None,
|
||||||
|
wait_for_ready=None,
|
||||||
|
timeout=None,
|
||||||
|
metadata=None):
|
||||||
|
return grpc.experimental.unary_unary(request, target, '/Fire_Reg/sendFire_Info',
|
||||||
|
BeiHangGrpc__pb2.JinYu_Request.SerializeToString,
|
||||||
|
BeiHangGrpc__pb2.BHFire_Response.FromString,
|
||||||
|
options, channel_credentials,
|
||||||
|
insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
|
|
@ -4,15 +4,15 @@ import base64
|
||||||
from io import BytesIO
|
from io import BytesIO
|
||||||
import requests
|
import requests
|
||||||
import grpc
|
import grpc
|
||||||
# import BeiHangGrpc_pb2_grpc
|
|
||||||
# import BeiHangGrpc_pb2
|
|
||||||
from . import BeiHangGrpc_pb2_grpc
|
from . import BeiHangGrpc_pb2_grpc
|
||||||
from . import BeiHangGrpc_pb2
|
from . import BeiHangGrpc_pb2
|
||||||
|
import uuid
|
||||||
|
from django.conf import settings
|
||||||
|
import cv2
|
||||||
requests.packages.urllib3.disable_warnings()
|
requests.packages.urllib3.disable_warnings()
|
||||||
# from apps.utils.tools import convert_to_base64
|
|
||||||
|
|
||||||
|
|
||||||
def analyse(ip: str, pic_url: str):
|
def helmet(ip: str, pic_url: str):
|
||||||
"""安全帽事件
|
"""安全帽事件
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
|
@ -20,7 +20,7 @@ def analyse(ip: str, pic_url: str):
|
||||||
pic_url (_type_): _description_
|
pic_url (_type_): _description_
|
||||||
"""
|
"""
|
||||||
# print(pic_url)
|
# print(pic_url)
|
||||||
channel = grpc.insecure_channel(ip) # 监听频道
|
channel = grpc.insecure_channel(ip+':2000') # 监听频道
|
||||||
stub = BeiHangGrpc_pb2_grpc.Helmet_RegStub(channel) # 客户端使用Stub类发送请求,参数为频道,为了绑定链接
|
stub = BeiHangGrpc_pb2_grpc.Helmet_RegStub(channel) # 客户端使用Stub类发送请求,参数为频道,为了绑定链接
|
||||||
image_id = 3
|
image_id = 3
|
||||||
|
|
||||||
|
@ -42,6 +42,33 @@ def analyse(ip: str, pic_url: str):
|
||||||
return False, response
|
return False, response
|
||||||
|
|
||||||
|
|
||||||
|
def fire1(ip: str, pic_url: str):
|
||||||
|
# 未配置灭火器事件
|
||||||
|
channel = grpc.insecure_channel(ip+':2001')
|
||||||
|
stub = BeiHangGrpc_pb2_grpc.Fire_RegStub(channel)
|
||||||
|
image_id = 3
|
||||||
|
img_name = '{}.png'.format(uuid.uuid4())
|
||||||
|
img_path = settings.BASE_DIR + '/temp/' + img_name
|
||||||
|
with open(img_path, "wb") as f:
|
||||||
|
f.write(requests.get(url=pic_url, verify=False).content).read())
|
||||||
|
img = cv2.imread(img_path)
|
||||||
|
resized_img = cv2.resize(img, None, fx=0.25,fy=0.25)
|
||||||
|
resized_img = cv2.imencode('.png',resized_img)[1]
|
||||||
|
image_base64 = str(base64.b64encode(resized_img))[2:-1]
|
||||||
|
|
||||||
|
request = BeiHangGrpc_pb2.JinYu_Request(zzid=image_id, imgsbase64=image_base64)
|
||||||
|
response = stub.sendFire_Info(request)
|
||||||
|
if response.FireinfoList:
|
||||||
|
for i in response.FireinfoList:
|
||||||
|
if i.fire == 0: # 配置了灭火器
|
||||||
|
return False, response
|
||||||
|
return True, response
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
path = 'http://10.99.5.24/evo-apigw/evo-oss/6ad010cf-ce45-11ec-9715-e4246c7d1635/20220826/1/dsf_3de82501-2521-11ed-884a-e4246c7d1635_7236037_7245601.jpg?token=399773e6-71f7-4202-b234-ff5aa8d2492c'
|
path = 'http://10.99.5.24/evo-apigw/evo-oss/6ad010cf-ce45-11ec-9715-e4246c7d1635/20220826/1/dsf_3de82501-2521-11ed-884a-e4246c7d1635_7236037_7245601.jpg?token=399773e6-71f7-4202-b234-ff5aa8d2492c'
|
||||||
base64img = str(base64.b64encode(BytesIO(requests.get(url=path, verify=False).content).read()), 'utf-8')
|
base64img = str(base64.b64encode(BytesIO(requests.get(url=path, verify=False).content).read()), 'utf-8')
|
|
@ -6,7 +6,7 @@ myLogger = logging.getLogger('log')
|
||||||
|
|
||||||
|
|
||||||
algo_dict = {
|
algo_dict = {
|
||||||
"helmet": "apps.ai.helmet.algo.analyse"
|
"helmet": "apps.ai.client.helmet"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -9,9 +9,11 @@ from apps.develop.serializers import CleanDataSerializer, GenerateVoiceSerialize
|
||||||
TestTaskSerializer, TestAlgoSerializer
|
TestTaskSerializer, TestAlgoSerializer
|
||||||
from apps.develop.tasks import backup_database, backup_media, reload_web_git, reload_server_git, reload_server_only
|
from apps.develop.tasks import backup_database, backup_media, reload_web_git, reload_server_git, reload_server_only
|
||||||
from rest_framework.exceptions import APIException
|
from rest_framework.exceptions import APIException
|
||||||
from apps.ecm.service import create_remind, notify_event
|
from apps.ecm.service import create_remind, notify_event, snap_and_analyse
|
||||||
|
from apps.opm.models import Opl
|
||||||
from apps.system.tasks import show
|
from apps.system.tasks import show
|
||||||
from apps.third.clients import dhClient
|
from apps.third.clients import dhClient
|
||||||
|
from apps.third.models import TDevice
|
||||||
from apps.utils.sms import send_sms
|
from apps.utils.sms import send_sms
|
||||||
from apps.utils.speech import generate_voice
|
from apps.utils.speech import generate_voice
|
||||||
|
|
||||||
|
@ -193,8 +195,19 @@ class TestViewSet(CustomGenericViewSet):
|
||||||
# data = {'id': 1662032288888, 'category': 'alarm', 'method': 'alarm.msg', 'info': {'orgName': '曲阳县金隅水泥厂', 'nodeCode': '1000038$1$0$25', 'deviceCode': '1000038', 'alarmCode': 'c3df59cd-59d0-4f46-a32c-d2bf7778b37d', 'alarmPicture': '6ad010cf-ce45-11ec-9715-e4246c7d1635/20220901/1/dsf_80fed821-29c9-11ed-884a-e4246c7d1635_44280859_44288676.jpg', 'nodeType': 2, 'alarmDate': '1662032288', 'alarmGrade': 2, 'isSave': True, 'extend': {'faceImageUrl': ['6ad010cf-ce45-11ec-9715-e4246c7d1635/20220901/1/dsf_80fed821-29c9-11ed-884a-e4246c7d1635_44280859_44288676.jpg'], 'glass': 0, 'beard': 0, 'candidateInfo': [], 'sex': 0, 'occurrenceCount': 0, 'deviceCode': '1000038', 'globalScenePicUrl': '6ad010cf-ce45-11ec-9715-e4246c7d1635/20220901/1/dsf_80fed821-29c9-11ed-884a-e4246c7d1635_44127174_44280859.jpg', 'eye': 0, 'alarmType': 1001000, 'perFlag': -1, 'mouth': 0, 'feature': [], 'isHit': True, 'channelSeq': 25, 'szSerialUUID': '', 'channelName': '公司大门口', 'beginTime': 1662032284, 'endTime': 1662032284, 'age': -1, 'mask': 0}, 'unitType': 1, 'alarmType': 1001000, 'channelSeq': 25, 'orgCode': '001001001', 'channelName': '公司大门口', 'alarmStat': 1, 'isEvent': True}, 'subsystem': 'evo-face', 'userIds': None, 'sid': None, 'domainId': None, 'infoArray': None, 'protocol': None}
|
# data = {'id': 1662032288888, 'category': 'alarm', 'method': 'alarm.msg', 'info': {'orgName': '曲阳县金隅水泥厂', 'nodeCode': '1000038$1$0$25', 'deviceCode': '1000038', 'alarmCode': 'c3df59cd-59d0-4f46-a32c-d2bf7778b37d', 'alarmPicture': '6ad010cf-ce45-11ec-9715-e4246c7d1635/20220901/1/dsf_80fed821-29c9-11ed-884a-e4246c7d1635_44280859_44288676.jpg', 'nodeType': 2, 'alarmDate': '1662032288', 'alarmGrade': 2, 'isSave': True, 'extend': {'faceImageUrl': ['6ad010cf-ce45-11ec-9715-e4246c7d1635/20220901/1/dsf_80fed821-29c9-11ed-884a-e4246c7d1635_44280859_44288676.jpg'], 'glass': 0, 'beard': 0, 'candidateInfo': [], 'sex': 0, 'occurrenceCount': 0, 'deviceCode': '1000038', 'globalScenePicUrl': '6ad010cf-ce45-11ec-9715-e4246c7d1635/20220901/1/dsf_80fed821-29c9-11ed-884a-e4246c7d1635_44127174_44280859.jpg', 'eye': 0, 'alarmType': 1001000, 'perFlag': -1, 'mouth': 0, 'feature': [], 'isHit': True, 'channelSeq': 25, 'szSerialUUID': '', 'channelName': '公司大门口', 'beginTime': 1662032284, 'endTime': 1662032284, 'age': -1, 'mask': 0}, 'unitType': 1, 'alarmType': 1001000, 'channelSeq': 25, 'orgCode': '001001001', 'channelName': '公司大门口', 'alarmStat': 1, 'isEvent': True}, 'subsystem': 'evo-face', 'userIds': None, 'sid': None, 'domainId': None, 'infoArray': None, 'protocol': None}
|
||||||
data = {'id': 1662099853937, 'category': 'alarm', 'method': 'alarm.msg', 'info': {'orgName': '曲阳县金隅水泥厂', 'nodeCode': '1000038$1$0$24', 'deviceCode': '1000038', 'alarmCode': 'c520e09f-4b5d-4d04-be7b-005386a9b835', 'alarmPicture': '6ad010cf-ce45-11ec-9715-e4246c7d1635/20220902/1/dsf_a880f743-2a7e-11ed-884a-e4246c7d1635_57321861_57329128.jpg', 'nodeType': 2, 'alarmDate': '1662099849', 'alarmGrade': 2, 'isSave': True, 'extend': {'faceImageUrl': ['6ad010cf-ce45-11ec-9715-e4246c7d1635/20220902/1/dsf_a880f743-2a7e-11ed-884a-e4246c7d1635_57321861_57329128.jpg'], 'glass': 0, 'beard': 0, 'candidateInfo': [{'birthday': '2022-8-24', 'faceImageUrl': [
|
data = {'id': 1662099853937, 'category': 'alarm', 'method': 'alarm.msg', 'info': {'orgName': '曲阳县金隅水泥厂', 'nodeCode': '1000038$1$0$24', 'deviceCode': '1000038', 'alarmCode': 'c520e09f-4b5d-4d04-be7b-005386a9b835', 'alarmPicture': '6ad010cf-ce45-11ec-9715-e4246c7d1635/20220902/1/dsf_a880f743-2a7e-11ed-884a-e4246c7d1635_57321861_57329128.jpg', 'nodeType': 2, 'alarmDate': '1662099849', 'alarmGrade': 2, 'isSave': True, 'extend': {'faceImageUrl': ['6ad010cf-ce45-11ec-9715-e4246c7d1635/20220902/1/dsf_a880f743-2a7e-11ed-884a-e4246c7d1635_57321861_57329128.jpg'], 'glass': 0, 'beard': 0, 'candidateInfo': [{'birthday': '2022-8-24', 'faceImageUrl': [
|
||||||
'6ad010cf-ce45-11ec-9715-e4246c7d1635/20220902/1/dsf_a880f743-2a7e-11ed-884a-e4246c7d1635_57329128_57402530.jpg'], 'groupName': '全体人员', 'similarity': 99, 'sex': 1, 'cardType': 1, 'name': '曹前明', 'devPersonId': '48', 'id': '342422199004040175', 'type': 0}], 'sex': 0, 'occurrenceCount': 0, 'deviceCode': '1000038', 'globalScenePicUrl': '6ad010cf-ce45-11ec-9715-e4246c7d1635/20220902/1/dsf_a880f743-2a7e-11ed-884a-e4246c7d1635_56995669_57321861.jpg', 'eye': 0, 'alarmType': 1001003, 'perFlag': -1, 'mouth': 0, 'feature': [], 'isHit': True, 'channelSeq': 24, 'szSerialUUID': '', 'channelName': '窑头平台值班室', 'beginTime': 1662099849, 'endTime': 1662099849, 'age': -1, 'mask': 0}, 'unitType': 1, 'alarmType': 1001003, 'channelSeq': 24, 'orgCode': '001001001', 'channelName': '窑头平台值班室', 'alarmStat': 1, 'isEvent': True}, 'subsystem': 'evo-face', 'userIds': None, 'sid': None, 'domainId': None, 'infoArray': None, 'protocol': None}
|
'6ad010cf-ce45-11ec-9715-e4246c7d1635/20220902/1/dsf_a880f743-2a7e-11ed-884a-e4246c7d1635_57329128_57402530.jpg'], 'groupName': '全体人员', 'similarity': 99, 'sex': 1, 'cardType': 1, 'name': '曹前明', 'devPersonId': '48', 'id': '342422199004040175', 'type': 0}], 'sex': 0, 'occurrenceCount': 0, 'deviceCode': '1000038', 'globalScenePicUrl': '6ad010cf-ce45-11ec-9715-e4246c7d1635/20220902/1/dsf_a880f743-2a7e-11ed-884a-e4246c7d1635_56995669_57321861.jpg', 'eye': 0, 'alarmType': 1001003, 'perFlag': -1, 'mouth': 0, 'feature': [], 'isHit': True, 'channelSeq': 24, 'szSerialUUID': '', 'channelName': '窑头平台值班室', 'beginTime': 1662099849, 'endTime': 1662099849, 'age': -1, 'mask': 0}, 'unitType': 1, 'alarmType': 1001003, 'channelSeq': 24, 'orgCode': '001001001', 'channelName': '窑头平台值班室', 'alarmStat': 1, 'isEvent': True}, 'subsystem': 'evo-face', 'userIds': None, 'sid': None, 'domainId': None, 'infoArray': None, 'protocol': None}
|
||||||
|
data = {'id': 1662786479984, 'category': 'alarm', 'method': 'alarm.msg', 'info': {'orgName': '曲阳县金隅水泥厂', 'nodeCode': '1000038$1$0$24', 'deviceCode': '1000038', 'alarmCode': 'b672731c-4807-47e6-a468-c5f85a68e87d', 'alarmPicture': '6ad010cf-ce45-11ec-9715-e4246c7d1635/20220910/1/dsf_2c1150b4-309b-11ed-884a-e4246c7d1635_45588364_45596445.jpg', 'nodeType': 2, 'alarmDate': '1662786477', 'alarmGrade': 2, 'isSave': True, 'extend': {'faceImageUrl': ['6ad010cf-ce45-11ec-9715-e4246c7d1635/20220910/1/dsf_2c1150b4-309b-11ed-884a-e4246c7d1635_45588364_45596445.jpg'], 'glass': 0, 'beard': 0, 'candidateInfo': [{'birthday': '2022-8-24', 'faceImageUrl': ['6ad010cf-ce45-11ec-9715-e4246c7d1635/20220910/1/dsf_2c1150b4-309b-11ed-884a-e4246c7d1635_45596445_45673444.jpg'], 'groupName': '全体人员', 'similarity': 81, 'sex': 2, 'cardType': 1, 'name': '石静', 'devPersonId': '47', 'id': '371324199502156548', 'type': 0}], 'sex': 0, 'occurrenceCount': 0, 'deviceCode': '1000038', 'globalScenePicUrl': '6ad010cf-ce45-11ec-9715-e4246c7d1635/20220910/1/dsf_2c1150b4-309b-11ed-884a-e4246c7d1635_45288246_45588364.jpg', 'eye': 0, 'alarmType': 1001003, 'perFlag': -1, 'mouth': 0, 'feature': [], 'isHit': True, 'channelSeq': 24, 'szSerialUUID': '', 'channelName': '窑头平台值班室', 'beginTime': 1662786477, 'endTime': 1662786477, 'age': -1, 'mask': 0}, 'unitType': 1, 'alarmType': 1001003, 'channelSeq': 24, 'orgCode': '001001001', 'channelName': '窑头平台值班室', 'alarmStat': 1, 'isEvent': True}, 'subsystem': 'evo-face', 'userIds': None, 'sid': None, 'domainId': None, 'infoArray': None, 'protocol': None}
|
||||||
dispatch_dahua_event(data=data)
|
dispatch_dahua_event(data=data)
|
||||||
return Response()
|
return Response()
|
||||||
|
|
||||||
|
@action(methods=['post'], detail=False, serializer_class=Serializer)
|
||||||
|
def test_snap(self, request, pk=None):
|
||||||
|
"""测试抓图识别
|
||||||
|
|
||||||
|
测试抓图识别
|
||||||
|
"""
|
||||||
|
vc = TDevice.objects.get(code='1000164$1$0$0')
|
||||||
|
snap_and_analyse(vc, ['fire1'], Opl.objects.get(id='1568880208688320512'))
|
||||||
|
return Response()
|
||||||
|
|
||||||
@action(methods=['post'], detail=False, serializer_class=Serializer)
|
@action(methods=['post'], detail=False, serializer_class=Serializer)
|
||||||
def send_wx_msg(self, request, pk=None):
|
def send_wx_msg(self, request, pk=None):
|
||||||
|
|
|
@ -82,7 +82,9 @@ def notify_event(event: Event, voice_msg=''):
|
||||||
obj_cate = event.obj_cate
|
obj_cate = event.obj_cate
|
||||||
area_name = event.area.name if event.area else ''
|
area_name = event.area.name if event.area else ''
|
||||||
params = {'area': area_name, 'employee': '', 'event': ''}
|
params = {'area': area_name, 'employee': '', 'event': ''}
|
||||||
if ep:
|
if event.opl: # 主要针对的是作业人员未就位事件
|
||||||
|
params['employee'] = event.opl.cate.name + '作业'
|
||||||
|
elif ep:
|
||||||
ep_name = ep.name
|
ep_name = ep.name
|
||||||
ep_type = '员工'
|
ep_type = '员工'
|
||||||
if ep.type == 'rempoyee':
|
if ep.type == 'rempoyee':
|
||||||
|
@ -217,6 +219,43 @@ def create_remind(event: Event, params: dict):
|
||||||
event.save()
|
event.save()
|
||||||
|
|
||||||
|
|
||||||
|
def check_not_in_place(opl: Opl):
|
||||||
|
# 检查作业人员未就位事件(直接创建事件)
|
||||||
|
area = opl.operation.area
|
||||||
|
try:
|
||||||
|
railId = area.third_info['xx_rail']['id']
|
||||||
|
json = {
|
||||||
|
"railId": railId,
|
||||||
|
"type": ""
|
||||||
|
}
|
||||||
|
is_ok, res = xxClient.request(**xxapis['rail_ibeacon_list'], json=json, raise_exception=False)
|
||||||
|
if is_ok:
|
||||||
|
blt_list = res['recordList']
|
||||||
|
macs = [] # 所有该区域在线标签
|
||||||
|
for i in blt_list:
|
||||||
|
macs.append(i['mac'])
|
||||||
|
tds = TDevice.objects.filter(type=TDevice.DEVICE_BLT, employee__user__opl_worker__opl=opl) # 所有工作人员的定位标签
|
||||||
|
for i in tds:
|
||||||
|
if i.code not in macs:
|
||||||
|
# 触发作业人员未就位事件
|
||||||
|
event = Event()
|
||||||
|
event.area = area
|
||||||
|
event.obj_cate = 'opl'
|
||||||
|
event.employee = i.employee
|
||||||
|
event.opl = opl
|
||||||
|
event.happen_time = timezone.now()
|
||||||
|
event.save()
|
||||||
|
cate = EventCate.objects.get(code='not_in_place')
|
||||||
|
Eventdo.objects.get_or_create(cate=cate, event=event, defaults={
|
||||||
|
'cate': event,
|
||||||
|
'event': event
|
||||||
|
})
|
||||||
|
notify_event(event)
|
||||||
|
break
|
||||||
|
except Exception:
|
||||||
|
myLogger.error('检查作业人员未就位失败', exc_info=True)
|
||||||
|
|
||||||
|
|
||||||
def check_miss_lcard(ep: Employee, area: Area):
|
def check_miss_lcard(ep: Employee, area: Area):
|
||||||
# 获取当前区域下的定位卡列表
|
# 获取当前区域下的定位卡列表
|
||||||
try:
|
try:
|
||||||
|
@ -620,7 +659,7 @@ def snap_and_analyse(vchannel: TDevice, algo_codes: list, opl: Opl):
|
||||||
if ec_codes:
|
if ec_codes:
|
||||||
# 获取本次所有发生事件种类
|
# 获取本次所有发生事件种类
|
||||||
ecs = EventCate.objects.filter(code__in=ec_codes.keys())
|
ecs = EventCate.objects.filter(code__in=ec_codes.keys())
|
||||||
obj_cate = 'other'
|
obj_cate = 'opl'
|
||||||
ep = None
|
ep = None
|
||||||
if 'helmet' in ec_codes:
|
if 'helmet' in ec_codes:
|
||||||
# 如果存在安全帽事件
|
# 如果存在安全帽事件
|
||||||
|
|
|
@ -263,3 +263,5 @@ class HrmService:
|
||||||
state=Visit.V_WORKING)
|
state=Visit.V_WORKING)
|
||||||
Rpj.objects.filter(state=Rpj.RPJ_ENTER, remployees__employee__id_number=id_number).update(
|
Rpj.objects.filter(state=Rpj.RPJ_ENTER, remployees__employee__id_number=id_number).update(
|
||||||
state=Rpj.RPJ_WORKING)
|
state=Rpj.RPJ_WORKING)
|
||||||
|
|
||||||
|
# 此处可触发安全帽事件逻辑
|
||||||
|
|
|
@ -125,7 +125,7 @@ class OplWorker(BaseModel):
|
||||||
作业许可人员
|
作业许可人员
|
||||||
"""
|
"""
|
||||||
worker = models.ForeignKey('system.user', verbose_name='作业人员',
|
worker = models.ForeignKey('system.user', verbose_name='作业人员',
|
||||||
on_delete=models.CASCADE)
|
on_delete=models.CASCADE, related_name='opl_worker')
|
||||||
opl = models.ForeignKey(Opl, verbose_name='作业许可',
|
opl = models.ForeignKey(Opl, verbose_name='作业许可',
|
||||||
on_delete=models.CASCADE)
|
on_delete=models.CASCADE)
|
||||||
duty = models.CharField('工作职责', max_length=100,
|
duty = models.CharField('工作职责', max_length=100,
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
|
||||||
from apps.ecm.tasks import opl_task
|
from apps.ecm.tasks import opl_task
|
||||||
from apps.opm.models import Operation, Opl, OplWorker
|
from apps.opm.models import Operation, Opl, OplWorker
|
||||||
from apps.third.models import TDevice
|
from apps.third.models import TDevice
|
||||||
|
|
|
@ -202,6 +202,7 @@ REST_FRAMEWORK = {
|
||||||
# simplejwt配置
|
# simplejwt配置
|
||||||
SIMPLE_JWT = {
|
SIMPLE_JWT = {
|
||||||
'ACCESS_TOKEN_LIFETIME': timedelta(days=1),
|
'ACCESS_TOKEN_LIFETIME': timedelta(days=1),
|
||||||
|
'REFRESH_TOKEN_LIFETIME': timedelta(days=30),
|
||||||
}
|
}
|
||||||
|
|
||||||
# 跨域配置/可用nginx处理,无需引入corsheaders
|
# 跨域配置/可用nginx处理,无需引入corsheaders
|
||||||
|
|
Loading…
Reference in New Issue