From bb7f59a301a390e04443fa4745bd2afa1fa58e0f Mon Sep 17 00:00:00 2001 From: qiuyao <qiuyao@hnkhzn.com> Date: 星期一, 28 四月 2025 16:38:30 +0800 Subject: [PATCH] 人脸识别离线SDK --- 项目代码/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v17/DocumentLayout.json | 976 +++------------ 项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/BaiDuFaceHelper.cs | 15 项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/FaceAI/TimeUtil.cs | 17 项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/System/Sys_UserController.cs | 7 项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/appsettings.json | 4 项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/FaceAI/FaceAttr.cs | 109 + 项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/FaceAI/FaceFeature.cs | 133 ++ 项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/FaceAI/FaceLiveness.cs | 548 ++++++++ 项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/FaceAI/FaceTrack.cs | 221 +++ 项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/FaceAI/FaceDraw.cs | 151 ++ 项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/FaceAI/FileUtil.cs | 23 项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_TelescopicService/WIDESEAWCS_TelescopicService.csproj | 1 项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/FaceAI/OrbeCamera.cs | 29 项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/WIDESEAWCS_Server.csproj | 1 项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/FaceAI/HjimiCamera.cs | 25 项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/FaceAI/ImageUtil.cs | 69 + 项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/FaceAI/FaceManager.cs | 209 +++ 项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/WIDESEAWCS_Common.csproj | 7 项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Program.cs | 3 项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/FaceAI/DevEnum.cs | 191 +++ 项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/FaceAI/FaceCompare.cs | 781 ++++++++++++ 项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_SystemServices/Sys_UserService.cs | 51 项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/FaceAI/Face.cs | 98 + 项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_ISystemServices/ISys_UserService.cs | 2 24 files changed, 2,916 insertions(+), 755 deletions(-) diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v17/DocumentLayout.json" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v17/DocumentLayout.json" index ae08cca..e687931 100644 --- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v17/DocumentLayout.json" +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v17/DocumentLayout.json" @@ -1,206 +1,62 @@ { "Version": 1, - "WorkspaceRootPath": "E:\\\u4F38\u7F29\u6746\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\", + "WorkspaceRootPath": "E:\\\u9879\u76EE\u6E90\u7801\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\", "Documents": [ { - "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|e:\\\u4F38\u7F29\u6746\\shensuogankongzhi\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_tasks\\ssg\\alarmresetjob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\ssg\\alarmresetjob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + "AbsoluteMoniker": "D:0:0:{9FBC654C-51DE-422D-9E1E-6A38268DE1E2}|WIDESEAWCS_Common\\WIDESEAWCS_Common.csproj|e:\\\u9879\u76EE\u6E90\u7801\\shensuogankongzhi\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_common\\faceai\\face.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{9FBC654C-51DE-422D-9E1E-6A38268DE1E2}|WIDESEAWCS_Common\\WIDESEAWCS_Common.csproj|solutionrelative:wideseawcs_common\\faceai\\face.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, { - "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|e:\\\u4F38\u7F29\u6746\\shensuogankongzhi\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_tasks\\ssg\\ssgonejob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\ssg\\ssgonejob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|e:\\\u4F38\u7F29\u6746\\shensuogankongzhi\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_tasks\\ssg\\ssgtwojob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\ssg\\ssgtwojob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{A14242DD-DA06-4DC3-8598-1761AA7C76D1}|WIDESEAWCS_SystemServices\\WIDESEAWCS_SystemServices.csproj|e:\\\u4F38\u7F29\u6746\\shensuogankongzhi\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_systemservices\\sys_userservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{A14242DD-DA06-4DC3-8598-1761AA7C76D1}|WIDESEAWCS_SystemServices\\WIDESEAWCS_SystemServices.csproj|solutionrelative:wideseawcs_systemservices\\sys_userservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|e:\\\u4F38\u7F29\u6746\\shensuogankongzhi\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_server\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "AbsoluteMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|e:\\\u9879\u76EE\u6E90\u7801\\shensuogankongzhi\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_server\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|solutionrelative:wideseawcs_server\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, { - "AbsoluteMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|e:\\\u4F38\u7F29\u6746\\shensuogankongzhi\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_server\\filter\\autofacpropertitymodulereg.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|solutionrelative:wideseawcs_server\\filter\\autofacpropertitymodulereg.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|e:\\\u4F38\u7F29\u6746\\shensuogankongzhi\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_server\\controllers\\telescopic\\alarmresethsycontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|solutionrelative:wideseawcs_server\\controllers\\telescopic\\alarmresethsycontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|e:\\\u4F38\u7F29\u6746\\shensuogankongzhi\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_server\\controllers\\telescopic\\facerecognitioncontroller .cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|solutionrelative:wideseawcs_server\\controllers\\telescopic\\facerecognitioncontroller .cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{7F200FE8-CAF6-4131-BD25-8D438FE0ABAC}|WIDESEAWCS_Model\\WIDESEAWCS_Model.csproj|e:\\\u4F38\u7F29\u6746\\shensuogankongzhi\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_model\\models\\telescopic\\dt_alarmresethsy.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{7F200FE8-CAF6-4131-BD25-8D438FE0ABAC}|WIDESEAWCS_Model\\WIDESEAWCS_Model.csproj|solutionrelative:wideseawcs_model\\models\\telescopic\\dt_alarmresethsy.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{1B1C16CA-8989-4590-BAF6-B55DCC330218}|WIDESEAWCS_TelescopicService\\WIDESEAWCS_TelescopicService.csproj|e:\\\u4F38\u7F29\u6746\\shensuogankongzhi\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_telescopicservice\\alarmresethsyserver.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{1B1C16CA-8989-4590-BAF6-B55DCC330218}|WIDESEAWCS_TelescopicService\\WIDESEAWCS_TelescopicService.csproj|solutionrelative:wideseawcs_telescopicservice\\alarmresethsyserver.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{4784950F-D89F-4F0A-9FFD-E8F44589AC2A}|WIDESEAWCS_ITelescopicService\\WIDESEAWCS_ITelescopicService.csproj|e:\\\u4F38\u7F29\u6746\\shensuogankongzhi\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_itelescopicservice\\ialarmresethsyserver.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{4784950F-D89F-4F0A-9FFD-E8F44589AC2A}|WIDESEAWCS_ITelescopicService\\WIDESEAWCS_ITelescopicService.csproj|solutionrelative:wideseawcs_itelescopicservice\\ialarmresethsyserver.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{1B1C16CA-8989-4590-BAF6-B55DCC330218}|WIDESEAWCS_TelescopicService\\WIDESEAWCS_TelescopicService.csproj|e:\\\u4F38\u7F29\u6746\\shensuogankongzhi\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_telescopicservice\\facerecognitionserver.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{1B1C16CA-8989-4590-BAF6-B55DCC330218}|WIDESEAWCS_TelescopicService\\WIDESEAWCS_TelescopicService.csproj|solutionrelative:wideseawcs_telescopicservice\\facerecognitionserver.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{4784950F-D89F-4F0A-9FFD-E8F44589AC2A}|WIDESEAWCS_ITelescopicService\\WIDESEAWCS_ITelescopicService.csproj|e:\\\u4F38\u7F29\u6746\\shensuogankongzhi\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_itelescopicservice\\imaintenanceteamservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{4784950F-D89F-4F0A-9FFD-E8F44589AC2A}|WIDESEAWCS_ITelescopicService\\WIDESEAWCS_ITelescopicService.csproj|solutionrelative:wideseawcs_itelescopicservice\\imaintenanceteamservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{1B1C16CA-8989-4590-BAF6-B55DCC330218}|WIDESEAWCS_TelescopicService\\WIDESEAWCS_TelescopicService.csproj|e:\\\u4F38\u7F29\u6746\\shensuogankongzhi\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_telescopicservice\\maintenanceteamservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{1B1C16CA-8989-4590-BAF6-B55DCC330218}|WIDESEAWCS_TelescopicService\\WIDESEAWCS_TelescopicService.csproj|solutionrelative:wideseawcs_telescopicservice\\maintenanceteamservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{1B1C16CA-8989-4590-BAF6-B55DCC330218}|WIDESEAWCS_TelescopicService\\WIDESEAWCS_TelescopicService.csproj|e:\\\u4F38\u7F29\u6746\\shensuogankongzhi\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_telescopicservice\\parametersservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{1B1C16CA-8989-4590-BAF6-B55DCC330218}|WIDESEAWCS_TelescopicService\\WIDESEAWCS_TelescopicService.csproj|solutionrelative:wideseawcs_telescopicservice\\parametersservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|e:\\\u4F38\u7F29\u6746\\shensuogankongzhi\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_server\\controllers\\telescopic\\parameterscontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|solutionrelative:wideseawcs_server\\controllers\\telescopic\\parameterscontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{7F200FE8-CAF6-4131-BD25-8D438FE0ABAC}|WIDESEAWCS_Model\\WIDESEAWCS_Model.csproj|e:\\\u4F38\u7F29\u6746\\shensuogankongzhi\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_model\\models\\telescopic\\dt_parameters.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{7F200FE8-CAF6-4131-BD25-8D438FE0ABAC}|WIDESEAWCS_Model\\WIDESEAWCS_Model.csproj|solutionrelative:wideseawcs_model\\models\\telescopic\\dt_parameters.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|e:\\\u4F38\u7F29\u6746\\shensuogankongzhi\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_tasks\\wideseawcs_tasks.csproj||{FA3CD31E-987B-443A-9B81-186104E8DAC1}|", - "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\wideseawcs_tasks.csproj||{FA3CD31E-987B-443A-9B81-186104E8DAC1}|" - }, - { - "AbsoluteMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|e:\\\u4F38\u7F29\u6746\\shensuogankongzhi\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_server\\controllers\\telescopic\\loginhsycontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|solutionrelative:wideseawcs_server\\controllers\\telescopic\\loginhsycontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{4784950F-D89F-4F0A-9FFD-E8F44589AC2A}|WIDESEAWCS_ITelescopicService\\WIDESEAWCS_ITelescopicService.csproj|e:\\\u4F38\u7F29\u6746\\shensuogankongzhi\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_itelescopicservice\\ifacerecognitionserver .cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{4784950F-D89F-4F0A-9FFD-E8F44589AC2A}|WIDESEAWCS_ITelescopicService\\WIDESEAWCS_ITelescopicService.csproj|solutionrelative:wideseawcs_itelescopicservice\\ifacerecognitionserver .cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{7F200FE8-CAF6-4131-BD25-8D438FE0ABAC}|WIDESEAWCS_Model\\WIDESEAWCS_Model.csproj|e:\\\u4F38\u7F29\u6746\\shensuogankongzhi\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_model\\models\\telescopic\\dt_facerecognition.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{7F200FE8-CAF6-4131-BD25-8D438FE0ABAC}|WIDESEAWCS_Model\\WIDESEAWCS_Model.csproj|solutionrelative:wideseawcs_model\\models\\telescopic\\dt_facerecognition.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{7F200FE8-CAF6-4131-BD25-8D438FE0ABAC}|WIDESEAWCS_Model\\WIDESEAWCS_Model.csproj|e:\\\u4F38\u7F29\u6746\\shensuogankongzhi\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_model\\models\\telescopic\\dt_maintenance.cs||{8B382828-6202-11D1-8870-0000F87579D2}", - "RelativeMoniker": "D:0:0:{7F200FE8-CAF6-4131-BD25-8D438FE0ABAC}|WIDESEAWCS_Model\\WIDESEAWCS_Model.csproj|solutionrelative:wideseawcs_model\\models\\telescopic\\dt_maintenance.cs||{8B382828-6202-11D1-8870-0000F87579D2}" - }, - { - "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|e:\\\u4F38\u7F29\u6746\\shensuogankongzhi\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_tasks\\oht\\ohtjob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\oht\\ohtjob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|e:\\\u4F38\u7F29\u6746\\shensuogankongzhi\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_tasks\\oht\\ohtenum.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\oht\\ohtenum.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{4784950F-D89F-4F0A-9FFD-E8F44589AC2A}|WIDESEAWCS_ITelescopicService\\WIDESEAWCS_ITelescopicService.csproj|e:\\\u4F38\u7F29\u6746\\shensuogankongzhi\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_itelescopicservice\\iparametersservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{4784950F-D89F-4F0A-9FFD-E8F44589AC2A}|WIDESEAWCS_ITelescopicService\\WIDESEAWCS_ITelescopicService.csproj|solutionrelative:wideseawcs_itelescopicservice\\iparametersservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{4784950F-D89F-4F0A-9FFD-E8F44589AC2A}|WIDESEAWCS_ITelescopicService\\WIDESEAWCS_ITelescopicService.csproj|e:\\\u4F38\u7F29\u6746\\shensuogankongzhi\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_itelescopicservice\\imaintenanceservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{4784950F-D89F-4F0A-9FFD-E8F44589AC2A}|WIDESEAWCS_ITelescopicService\\WIDESEAWCS_ITelescopicService.csproj|solutionrelative:wideseawcs_itelescopicservice\\imaintenanceservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{4784950F-D89F-4F0A-9FFD-E8F44589AC2A}|WIDESEAWCS_ITelescopicService\\WIDESEAWCS_ITelescopicService.csproj|e:\\\u4F38\u7F29\u6746\\shensuogankongzhi\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_itelescopicservice\\iloginhsyservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{4784950F-D89F-4F0A-9FFD-E8F44589AC2A}|WIDESEAWCS_ITelescopicService\\WIDESEAWCS_ITelescopicService.csproj|solutionrelative:wideseawcs_itelescopicservice\\iloginhsyservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{B17BAF3C-2BAD-4162-B6DC-46ED7A1E3D8D}|WIDESEAWCS_WMSPart\\WIDESEAWCS_WMSPart.csproj|e:\\\u4F38\u7F29\u6746\\shensuogankongzhi\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_wmspart\\locationinfoservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{B17BAF3C-2BAD-4162-B6DC-46ED7A1E3D8D}|WIDESEAWCS_WMSPart\\WIDESEAWCS_WMSPart.csproj|solutionrelative:wideseawcs_wmspart\\locationinfoservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{B17BAF3C-2BAD-4162-B6DC-46ED7A1E3D8D}|WIDESEAWCS_WMSPart\\WIDESEAWCS_WMSPart.csproj|e:\\\u4F38\u7F29\u6746\\shensuogankongzhi\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_wmspart\\stockinfodetailservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{B17BAF3C-2BAD-4162-B6DC-46ED7A1E3D8D}|WIDESEAWCS_WMSPart\\WIDESEAWCS_WMSPart.csproj|solutionrelative:wideseawcs_wmspart\\stockinfodetailservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{B17BAF3C-2BAD-4162-B6DC-46ED7A1E3D8D}|WIDESEAWCS_WMSPart\\WIDESEAWCS_WMSPart.csproj|e:\\\u4F38\u7F29\u6746\\shensuogankongzhi\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_wmspart\\stockinfoservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{B17BAF3C-2BAD-4162-B6DC-46ED7A1E3D8D}|WIDESEAWCS_WMSPart\\WIDESEAWCS_WMSPart.csproj|solutionrelative:wideseawcs_wmspart\\stockinfoservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{1B1C16CA-8989-4590-BAF6-B55DCC330218}|WIDESEAWCS_TelescopicService\\WIDESEAWCS_TelescopicService.csproj|e:\\\u4F38\u7F29\u6746\\shensuogankongzhi\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_telescopicservice\\loginhsyservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{1B1C16CA-8989-4590-BAF6-B55DCC330218}|WIDESEAWCS_TelescopicService\\WIDESEAWCS_TelescopicService.csproj|solutionrelative:wideseawcs_telescopicservice\\loginhsyservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|e:\\\u4F38\u7F29\u6746\\shensuogankongzhi\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_server\\controllers\\wmspart\\locationinfocontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|solutionrelative:wideseawcs_server\\controllers\\wmspart\\locationinfocontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{83F18A31-5983-4587-A0B2-414BF70E50B5}|WIDESEAWCS_TaskInfoService\\WIDESEAWCS_TaskInfoService.csproj|e:\\\u4F38\u7F29\u6746\\shensuogankongzhi\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_taskinfoservice\\taskservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{83F18A31-5983-4587-A0B2-414BF70E50B5}|WIDESEAWCS_TaskInfoService\\WIDESEAWCS_TaskInfoService.csproj|solutionrelative:wideseawcs_taskinfoservice\\taskservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{83F18A31-5983-4587-A0B2-414BF70E50B5}|WIDESEAWCS_TaskInfoService\\WIDESEAWCS_TaskInfoService.csproj|e:\\\u4F38\u7F29\u6746\\shensuogankongzhi\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_taskinfoservice\\taskhtyservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{83F18A31-5983-4587-A0B2-414BF70E50B5}|WIDESEAWCS_TaskInfoService\\WIDESEAWCS_TaskInfoService.csproj|solutionrelative:wideseawcs_taskinfoservice\\taskhtyservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{83F18A31-5983-4587-A0B2-414BF70E50B5}|WIDESEAWCS_TaskInfoService\\WIDESEAWCS_TaskInfoService.csproj|e:\\\u4F38\u7F29\u6746\\shensuogankongzhi\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_taskinfoservice\\taskexecutedetailservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{83F18A31-5983-4587-A0B2-414BF70E50B5}|WIDESEAWCS_TaskInfoService\\WIDESEAWCS_TaskInfoService.csproj|solutionrelative:wideseawcs_taskinfoservice\\taskexecutedetailservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{7279A2AE-8D1F-4E66-A73A-01AF7927A336}|WIDESEAWCS_ITaskInfoService\\WIDESEAWCS_ITaskInfoService.csproj|e:\\\u4F38\u7F29\u6746\\shensuogankongzhi\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_itaskinfoservice\\itaskhtyservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{7279A2AE-8D1F-4E66-A73A-01AF7927A336}|WIDESEAWCS_ITaskInfoService\\WIDESEAWCS_ITaskInfoService.csproj|solutionrelative:wideseawcs_itaskinfoservice\\itaskhtyservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{7279A2AE-8D1F-4E66-A73A-01AF7927A336}|WIDESEAWCS_ITaskInfoService\\WIDESEAWCS_ITaskInfoService.csproj|e:\\\u4F38\u7F29\u6746\\shensuogankongzhi\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_itaskinfoservice\\itaskexecutedetailservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{7279A2AE-8D1F-4E66-A73A-01AF7927A336}|WIDESEAWCS_ITaskInfoService\\WIDESEAWCS_ITaskInfoService.csproj|solutionrelative:wideseawcs_itaskinfoservice\\itaskexecutedetailservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|e:\\\u4F38\u7F29\u6746\\shensuogankongzhi\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_tasks\\gzj\\gzjjob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\gzj\\gzjjob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|e:\\\u4F38\u7F29\u6746\\shensuogankongzhi\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_server\\controllers\\quartzjob\\deviceinfocontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|solutionrelative:wideseawcs_server\\controllers\\quartzjob\\deviceinfocontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|e:\\\u4F38\u7F29\u6746\\shensuogankongzhi\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_server\\controllers\\system\\batchcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|solutionrelative:wideseawcs_server\\controllers\\system\\batchcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{9E4BFF47-52BF-4FD8-9CC7-3763BF19D9E0}|WIDESEAWCS_ISystemServices\\WIDESEAWCS_ISystemServices.csproj|e:\\\u4F38\u7F29\u6746\\shensuogankongzhi\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_isystemservices\\isys_userservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{9E4BFF47-52BF-4FD8-9CC7-3763BF19D9E0}|WIDESEAWCS_ISystemServices\\WIDESEAWCS_ISystemServices.csproj|solutionrelative:wideseawcs_isystemservices\\isys_userservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|e:\\\u4F38\u7F29\u6746\\shensuogankongzhi\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_server\\controllers\\system\\sys_usercontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|solutionrelative:wideseawcs_server\\controllers\\system\\sys_usercontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|e:\\\u4F38\u7F29\u6746\\shensuogankongzhi\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_server\\appsettings.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}", + "AbsoluteMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|E:\\\u9879\u76EE\u6E90\u7801\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\wideseawcs_server\\appsettings.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}", "RelativeMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|solutionrelative:wideseawcs_server\\appsettings.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}" }, { - "AbsoluteMoniker": "D:0:0:{1B1C16CA-8989-4590-BAF6-B55DCC330218}|WIDESEAWCS_TelescopicService\\WIDESEAWCS_TelescopicService.csproj|e:\\\u4F38\u7F29\u6746\\shensuogankongzhi\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_telescopicservice\\maintenanceservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{1B1C16CA-8989-4590-BAF6-B55DCC330218}|WIDESEAWCS_TelescopicService\\WIDESEAWCS_TelescopicService.csproj|solutionrelative:wideseawcs_telescopicservice\\maintenanceservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + "AbsoluteMoniker": "D:0:0:{9FBC654C-51DE-422D-9E1E-6A38268DE1E2}|WIDESEAWCS_Common\\WIDESEAWCS_Common.csproj|e:\\\u9879\u76EE\u6E90\u7801\\shensuogankongzhi\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_common\\faceai\\faceattr.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{9FBC654C-51DE-422D-9E1E-6A38268DE1E2}|WIDESEAWCS_Common\\WIDESEAWCS_Common.csproj|solutionrelative:wideseawcs_common\\faceai\\faceattr.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, { - "AbsoluteMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|e:\\\u4F38\u7F29\u6746\\shensuogankongzhi\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_server\\controllers\\telescopic\\maintenancecontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|solutionrelative:wideseawcs_server\\controllers\\telescopic\\maintenancecontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + "AbsoluteMoniker": "D:0:0:{9FBC654C-51DE-422D-9E1E-6A38268DE1E2}|WIDESEAWCS_Common\\WIDESEAWCS_Common.csproj|e:\\\u9879\u76EE\u6E90\u7801\\shensuogankongzhi\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_common\\faceai\\facecompare.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{9FBC654C-51DE-422D-9E1E-6A38268DE1E2}|WIDESEAWCS_Common\\WIDESEAWCS_Common.csproj|solutionrelative:wideseawcs_common\\faceai\\facecompare.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, { - "AbsoluteMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|e:\\\u4F38\u7F29\u6746\\shensuogankongzhi\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_server\\controllers\\telescopic\\maintenanceteamcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|solutionrelative:wideseawcs_server\\controllers\\telescopic\\maintenanceteamcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + "AbsoluteMoniker": "D:0:0:{9FBC654C-51DE-422D-9E1E-6A38268DE1E2}|WIDESEAWCS_Common\\WIDESEAWCS_Common.csproj|e:\\\u9879\u76EE\u6E90\u7801\\shensuogankongzhi\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_common\\faceai\\facemanager.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{9FBC654C-51DE-422D-9E1E-6A38268DE1E2}|WIDESEAWCS_Common\\WIDESEAWCS_Common.csproj|solutionrelative:wideseawcs_common\\faceai\\facemanager.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, { - "AbsoluteMoniker": "D:0:0:{C2D3D138-9109-481B-8BEB-A27597890B2C}|WIDESEAWCS_DTO\\WIDESEAWCS_DTO.csproj|e:\\\u4F38\u7F29\u6746\\shensuogankongzhi\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_dto\\telescopic\\paginationdto.cs||{8B382828-6202-11D1-8870-0000F87579D2}", - "RelativeMoniker": "D:0:0:{C2D3D138-9109-481B-8BEB-A27597890B2C}|WIDESEAWCS_DTO\\WIDESEAWCS_DTO.csproj|solutionrelative:wideseawcs_dto\\telescopic\\paginationdto.cs||{8B382828-6202-11D1-8870-0000F87579D2}" + "AbsoluteMoniker": "D:0:0:{A14242DD-DA06-4DC3-8598-1761AA7C76D1}|WIDESEAWCS_SystemServices\\WIDESEAWCS_SystemServices.csproj|E:\\\u9879\u76EE\u6E90\u7801\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\wideseawcs_systemservices\\sys_userservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{A14242DD-DA06-4DC3-8598-1761AA7C76D1}|WIDESEAWCS_SystemServices\\WIDESEAWCS_SystemServices.csproj|solutionrelative:wideseawcs_systemservices\\sys_userservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, { - "AbsoluteMoniker": "D:0:0:{7F200FE8-CAF6-4131-BD25-8D438FE0ABAC}|WIDESEAWCS_Model\\WIDESEAWCS_Model.csproj|e:\\\u4F38\u7F29\u6746\\shensuogankongzhi\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_model\\models\\telescopic\\dt_loginhsy.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{7F200FE8-CAF6-4131-BD25-8D438FE0ABAC}|WIDESEAWCS_Model\\WIDESEAWCS_Model.csproj|solutionrelative:wideseawcs_model\\models\\telescopic\\dt_loginhsy.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + "AbsoluteMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|E:\\\u9879\u76EE\u6E90\u7801\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\wideseawcs_server\\controllers\\system\\sys_usercontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|solutionrelative:wideseawcs_server\\controllers\\system\\sys_usercontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, { - "AbsoluteMoniker": "D:0:0:{C2D3D138-9109-481B-8BEB-A27597890B2C}|WIDESEAWCS_DTO\\WIDESEAWCS_DTO.csproj|e:\\\u4F38\u7F29\u6746\\shensuogankongzhi\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_dto\\system\\adduserdto.cs||{8B382828-6202-11D1-8870-0000F87579D2}", - "RelativeMoniker": "D:0:0:{C2D3D138-9109-481B-8BEB-A27597890B2C}|WIDESEAWCS_DTO\\WIDESEAWCS_DTO.csproj|solutionrelative:wideseawcs_dto\\system\\adduserdto.cs||{8B382828-6202-11D1-8870-0000F87579D2}" + "AbsoluteMoniker": "D:0:0:{9E4BFF47-52BF-4FD8-9CC7-3763BF19D9E0}|WIDESEAWCS_ISystemServices\\WIDESEAWCS_ISystemServices.csproj|E:\\\u9879\u76EE\u6E90\u7801\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\wideseawcs_isystemservices\\isys_userservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{9E4BFF47-52BF-4FD8-9CC7-3763BF19D9E0}|WIDESEAWCS_ISystemServices\\WIDESEAWCS_ISystemServices.csproj|solutionrelative:wideseawcs_isystemservices\\isys_userservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, { - "AbsoluteMoniker": "D:0:0:{7F200FE8-CAF6-4131-BD25-8D438FE0ABAC}|WIDESEAWCS_Model\\WIDESEAWCS_Model.csproj|e:\\\u4F38\u7F29\u6746\\shensuogankongzhi\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_model\\models\\system\\sys_user.cs||{8B382828-6202-11D1-8870-0000F87579D2}", - "RelativeMoniker": "D:0:0:{7F200FE8-CAF6-4131-BD25-8D438FE0ABAC}|WIDESEAWCS_Model\\WIDESEAWCS_Model.csproj|solutionrelative:wideseawcs_model\\models\\system\\sys_user.cs||{8B382828-6202-11D1-8870-0000F87579D2}" + "AbsoluteMoniker": "D:0:0:{9FBC654C-51DE-422D-9E1E-6A38268DE1E2}|WIDESEAWCS_Common\\WIDESEAWCS_Common.csproj|E:\\\u9879\u76EE\u6E90\u7801\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\wideseawcs_common\\baidufacehelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{9FBC654C-51DE-422D-9E1E-6A38268DE1E2}|WIDESEAWCS_Common\\WIDESEAWCS_Common.csproj|solutionrelative:wideseawcs_common\\baidufacehelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{1B1C16CA-8989-4590-BAF6-B55DCC330218}|WIDESEAWCS_TelescopicService\\WIDESEAWCS_TelescopicService.csproj|E:\\\u9879\u76EE\u6E90\u7801\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\wideseawcs_telescopicservice\\parametersservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{1B1C16CA-8989-4590-BAF6-B55DCC330218}|WIDESEAWCS_TelescopicService\\WIDESEAWCS_TelescopicService.csproj|solutionrelative:wideseawcs_telescopicservice\\parametersservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{1B1C16CA-8989-4590-BAF6-B55DCC330218}|WIDESEAWCS_TelescopicService\\WIDESEAWCS_TelescopicService.csproj|E:\\\u9879\u76EE\u6E90\u7801\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\wideseawcs_telescopicservice\\facerecognitionserver.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{1B1C16CA-8989-4590-BAF6-B55DCC330218}|WIDESEAWCS_TelescopicService\\WIDESEAWCS_TelescopicService.csproj|solutionrelative:wideseawcs_telescopicservice\\facerecognitionserver.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{9FBC654C-51DE-422D-9E1E-6A38268DE1E2}|WIDESEAWCS_Common\\WIDESEAWCS_Common.csproj|E:\\\u9879\u76EE\u6E90\u7801\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\wideseawcs_common\\faceai\\imageutil.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{9FBC654C-51DE-422D-9E1E-6A38268DE1E2}|WIDESEAWCS_Common\\WIDESEAWCS_Common.csproj|solutionrelative:wideseawcs_common\\faceai\\imageutil.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{9FBC654C-51DE-422D-9E1E-6A38268DE1E2}|WIDESEAWCS_Common\\WIDESEAWCS_Common.csproj|E:\\\u9879\u76EE\u6E90\u7801\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\wideseawcs_common\\faceai\\facetrack.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{9FBC654C-51DE-422D-9E1E-6A38268DE1E2}|WIDESEAWCS_Common\\WIDESEAWCS_Common.csproj|solutionrelative:wideseawcs_common\\faceai\\facetrack.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" } ], "DocumentGroupContainers": [ @@ -210,612 +66,242 @@ "DocumentGroups": [ { "DockedWidth": 200, - "SelectedChildIndex": 1, + "SelectedChildIndex": 18, "Children": [ { "$type": "Bookmark", - "Name": "ST:0:0:{1c4feeaa-4718-4aa9-859d-94ce25d182ba}" + "Name": "ST:131:0:{116d2292-e37d-41cd-a077-ebacac4c8cc4}" + }, + { + "$type": "Bookmark", + "Name": "ST:132:0:{116d2292-e37d-41cd-a077-ebacac4c8cc4}" + }, + { + "$type": "Bookmark", + "Name": "ST:12:0:{2456bd12-ecf7-4988-a4a6-67d49173f565}" + }, + { + "$type": "Bookmark", + "Name": "ST:17:0:{2456bd12-ecf7-4988-a4a6-67d49173f565}" + }, + { + "$type": "Bookmark", + "Name": "ST:0:0:{65ddf8c3-8f89-4077-a6c6-dbb8853aab13}" + }, + { + "$type": "Bookmark", + "Name": "ST:133:0:{1fc202d4-d401-403c-9834-5b218574bb67}" + }, + { + "$type": "Bookmark", + "Name": "ST:129:0:{1fc202d4-d401-403c-9834-5b218574bb67}" + }, + { + "$type": "Bookmark", + "Name": "ST:128:0:{116d2292-e37d-41cd-a077-ebacac4c8cc4}" + }, + { + "$type": "Bookmark", + "Name": "ST:129:0:{116d2292-e37d-41cd-a077-ebacac4c8cc4}" + }, + { + "$type": "Bookmark", + "Name": "ST:131:0:{1fc202d4-d401-403c-9834-5b218574bb67}" + }, + { + "$type": "Bookmark", + "Name": "ST:130:0:{116d2292-e37d-41cd-a077-ebacac4c8cc4}" + }, + { + "$type": "Bookmark", + "Name": "ST:135:0:{1fc202d4-d401-403c-9834-5b218574bb67}" + }, + { + "$type": "Bookmark", + "Name": "ST:136:0:{1fc202d4-d401-403c-9834-5b218574bb67}" + }, + { + "$type": "Bookmark", + "Name": "ST:134:0:{116d2292-e37d-41cd-a077-ebacac4c8cc4}" + }, + { + "$type": "Bookmark", + "Name": "ST:0:0:{cce594b6-0c39-4442-ba28-10c64ac7e89f}" + }, + { + "$type": "Document", + "DocumentIndex": 1, + "Title": "Program.cs", + "DocumentMoniker": "E:\\\u9879\u76EE\u6E90\u7801\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Program.cs", + "RelativeDocumentMoniker": "WIDESEAWCS_Server\\Program.cs", + "ToolTip": "E:\\\u9879\u76EE\u6E90\u7801\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Program.cs", + "RelativeToolTip": "WIDESEAWCS_Server\\Program.cs", + "ViewState": "AQIAAGoAAAAAAAAAAAAAAHYAAAATAAAA", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-04-28T03:53:12.871Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 3, + "Title": "FaceAttr.cs", + "DocumentMoniker": "E:\\\u9879\u76EE\u6E90\u7801\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Common\\FaceAI\\FaceAttr.cs", + "RelativeDocumentMoniker": "WIDESEAWCS_Common\\FaceAI\\FaceAttr.cs", + "ToolTip": "E:\\\u9879\u76EE\u6E90\u7801\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Common\\FaceAI\\FaceAttr.cs", + "RelativeToolTip": "WIDESEAWCS_Common\\FaceAI\\FaceAttr.cs", + "ViewState": "AQIAAAAAAAAAAAAAAADwvwAAAAAAAAAA", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-04-28T03:50:04.487Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 5, + "Title": "FaceManager.cs", + "DocumentMoniker": "E:\\\u9879\u76EE\u6E90\u7801\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Common\\FaceAI\\FaceManager.cs", + "RelativeDocumentMoniker": "WIDESEAWCS_Common\\FaceAI\\FaceManager.cs", + "ToolTip": "E:\\\u9879\u76EE\u6E90\u7801\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Common\\FaceAI\\FaceManager.cs", + "RelativeToolTip": "WIDESEAWCS_Common\\FaceAI\\FaceManager.cs", + "ViewState": "AQIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-04-28T03:49:54.229Z", + "EditorCaption": "" }, { "$type": "Document", "DocumentIndex": 0, - "Title": "AlarmResetJob.cs", - "DocumentMoniker": "E:\\\u4F38\u7F29\u6746\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\SSG\\AlarmResetJob.cs", - "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\SSG\\AlarmResetJob.cs", - "ToolTip": "E:\\\u4F38\u7F29\u6746\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\SSG\\AlarmResetJob.cs", - "RelativeToolTip": "WIDESEAWCS_Tasks\\SSG\\AlarmResetJob.cs", - "ViewState": "AgIAABAAAAAAAAAAAAAAwBsAAAAAAAAAAAAAAA==", + "Title": "Face.cs", + "DocumentMoniker": "E:\\\u9879\u76EE\u6E90\u7801\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Common\\FaceAI\\Face.cs", + "RelativeDocumentMoniker": "WIDESEAWCS_Common\\FaceAI\\Face.cs", + "ToolTip": "E:\\\u9879\u76EE\u6E90\u7801\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Common\\FaceAI\\Face.cs", + "RelativeToolTip": "WIDESEAWCS_Common\\FaceAI\\Face.cs", + "ViewState": "AQIAACkAAAAAAAAAAAAYwEEAAAArAAAA", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2025-04-25T03:40:57.559Z", + "WhenOpened": "2025-04-28T03:49:48.428Z", "EditorCaption": "" }, { "$type": "Document", "DocumentIndex": 2, - "Title": "SSGTwoJob.cs", - "DocumentMoniker": "E:\\\u4F38\u7F29\u6746\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\SSG\\SSGTwoJob.cs", - "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\SSG\\SSGTwoJob.cs", - "ToolTip": "E:\\\u4F38\u7F29\u6746\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\SSG\\SSGTwoJob.cs", - "RelativeToolTip": "WIDESEAWCS_Tasks\\SSG\\SSGTwoJob.cs", - "ViewState": "AgIAABsAAAAAAAAAAADwvx0AAAAEAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2025-04-25T03:27:19.551Z" - }, - { - "$type": "Document", - "DocumentIndex": 10, - "Title": "IAlarmResetHsyServer.cs", - "DocumentMoniker": "E:\\\u4F38\u7F29\u6746\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_ITelescopicService\\IAlarmResetHsyServer.cs", - "RelativeDocumentMoniker": "WIDESEAWCS_ITelescopicService\\IAlarmResetHsyServer.cs", - "ToolTip": "E:\\\u4F38\u7F29\u6746\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_ITelescopicService\\IAlarmResetHsyServer.cs", - "RelativeToolTip": "WIDESEAWCS_ITelescopicService\\IAlarmResetHsyServer.cs", - "ViewState": "AgIAAAMAAAAAAAAAAADwvxMAAAAAAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2025-04-25T06:40:30.15Z" - }, - { - "$type": "Document", - "DocumentIndex": 4, - "Title": "Program.cs", - "DocumentMoniker": "E:\\\u4F38\u7F29\u6746\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Program.cs", - "RelativeDocumentMoniker": "WIDESEAWCS_Server\\Program.cs", - "ToolTip": "E:\\\u4F38\u7F29\u6746\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Program.cs", - "RelativeToolTip": "WIDESEAWCS_Server\\Program.cs", - "ViewState": "AgIAAHcAAAAAAAAAAAAiwJYAAAAAAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2025-04-25T06:16:10.763Z" - }, - { - "$type": "Document", - "DocumentIndex": 1, - "Title": "SSGOneJob.cs", - "DocumentMoniker": "E:\\\u4F38\u7F29\u6746\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\SSG\\SSGOneJob.cs", - "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\SSG\\SSGOneJob.cs", - "ToolTip": "E:\\\u4F38\u7F29\u6746\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\SSG\\SSGOneJob.cs", - "RelativeToolTip": "WIDESEAWCS_Tasks\\SSG\\SSGOneJob.cs", - "ViewState": "AgIAABIAAAAAAAAAAAAAACcAAAA3AAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2025-04-25T03:27:13.297Z" - }, - { - "$type": "Document", - "DocumentIndex": 3, - "Title": "Sys_UserService.cs", - "DocumentMoniker": "E:\\\u4F38\u7F29\u6746\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_SystemServices\\Sys_UserService.cs", - "RelativeDocumentMoniker": "WIDESEAWCS_SystemServices\\Sys_UserService.cs", - "ToolTip": "E:\\\u4F38\u7F29\u6746\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_SystemServices\\Sys_UserService.cs", - "RelativeToolTip": "WIDESEAWCS_SystemServices\\Sys_UserService.cs", - "ViewState": "AgIAAAAAAAAAAAAAAAAAAA4AAAAWAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2025-04-07T09:19:43.403Z" - }, - { - "$type": "Document", - "DocumentIndex": 5, - "Title": "AutofacPropertityModuleReg.cs", - "DocumentMoniker": "E:\\\u4F38\u7F29\u6746\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Filter\\AutofacPropertityModuleReg.cs", - "RelativeDocumentMoniker": "WIDESEAWCS_Server\\Filter\\AutofacPropertityModuleReg.cs", - "ToolTip": "E:\\\u4F38\u7F29\u6746\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Filter\\AutofacPropertityModuleReg.cs", - "RelativeToolTip": "WIDESEAWCS_Server\\Filter\\AutofacPropertityModuleReg.cs", - "ViewState": "AgIAAAAAAAAAAAAAAAAAAAgAAAAJAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2025-04-25T08:52:15.117Z" + "Title": "appsettings.json", + "DocumentMoniker": "E:\\\u9879\u76EE\u6E90\u7801\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\appsettings.json", + "RelativeDocumentMoniker": "WIDESEAWCS_Server\\appsettings.json", + "ToolTip": "E:\\\u9879\u76EE\u6E90\u7801\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\appsettings.json", + "RelativeToolTip": "WIDESEAWCS_Server\\appsettings.json", + "ViewState": "AQIAAAoAAAAAAAAAAAAAABEAAAAYAAAA", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001642|", + "WhenOpened": "2025-04-27T02:51:42.502Z", + "EditorCaption": "" }, { "$type": "Document", "DocumentIndex": 7, - "Title": "FaceRecognitionController .cs", - "DocumentMoniker": "E:\\\u4F38\u7F29\u6746\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Controllers\\Telescopic\\FaceRecognitionController .cs", - "RelativeDocumentMoniker": "WIDESEAWCS_Server\\Controllers\\Telescopic\\FaceRecognitionController .cs", - "ToolTip": "E:\\\u4F38\u7F29\u6746\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Controllers\\Telescopic\\FaceRecognitionController .cs", - "RelativeToolTip": "WIDESEAWCS_Server\\Controllers\\Telescopic\\FaceRecognitionController .cs", - "ViewState": "AgIAAAAAAAAAAAAAAAAAABEAAABVAAAAAAAAAA==", + "Title": "Sys_UserController.cs", + "DocumentMoniker": "E:\\\u9879\u76EE\u6E90\u7801\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Controllers\\System\\Sys_UserController.cs", + "RelativeDocumentMoniker": "WIDESEAWCS_Server\\Controllers\\System\\Sys_UserController.cs", + "ToolTip": "E:\\\u9879\u76EE\u6E90\u7801\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Controllers\\System\\Sys_UserController.cs", + "RelativeToolTip": "WIDESEAWCS_Server\\Controllers\\System\\Sys_UserController.cs", + "ViewState": "AQIAABQAAAAAAAAAAAAAACMAAAAmAAAA", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2025-04-16T02:30:26.795Z" + "WhenOpened": "2025-04-27T02:48:46.616Z" + }, + { + "$type": "Document", + "DocumentIndex": 8, + "Title": "ISys_UserService.cs", + "DocumentMoniker": "E:\\\u9879\u76EE\u6E90\u7801\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_ISystemServices\\ISys_UserService.cs", + "RelativeDocumentMoniker": "WIDESEAWCS_ISystemServices\\ISys_UserService.cs", + "ToolTip": "E:\\\u9879\u76EE\u6E90\u7801\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_ISystemServices\\ISys_UserService.cs", + "RelativeToolTip": "WIDESEAWCS_ISystemServices\\ISys_UserService.cs", + "ViewState": "AQIAADgAAAAAAAAAAAAiwE4AAAAIAAAA", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-04-27T02:47:49.281Z" + }, + { + "$type": "Document", + "DocumentIndex": 4, + "Title": "FaceCompare.cs", + "DocumentMoniker": "E:\\\u9879\u76EE\u6E90\u7801\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Common\\FaceAI\\FaceCompare.cs", + "RelativeDocumentMoniker": "WIDESEAWCS_Common\\FaceAI\\FaceCompare.cs", + "ToolTip": "E:\\\u9879\u76EE\u6E90\u7801\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Common\\FaceAI\\FaceCompare.cs", + "RelativeToolTip": "WIDESEAWCS_Common\\FaceAI\\FaceCompare.cs", + "ViewState": "AQIAAAkAAAAAAAAAAAAlwBgAAAAWAAAA", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-04-27T02:39:43.91Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 6, + "Title": "Sys_UserService.cs", + "DocumentMoniker": "E:\\\u9879\u76EE\u6E90\u7801\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_SystemServices\\Sys_UserService.cs", + "RelativeDocumentMoniker": "WIDESEAWCS_SystemServices\\Sys_UserService.cs", + "ToolTip": "E:\\\u9879\u76EE\u6E90\u7801\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_SystemServices\\Sys_UserService.cs", + "RelativeToolTip": "WIDESEAWCS_SystemServices\\Sys_UserService.cs", + "ViewState": "AQIAAAsBAAAAAAAAAAAgwBgBAAAYAAAA", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-04-27T02:32:59.781Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 10, + "Title": "ParametersService.cs", + "DocumentMoniker": "E:\\\u9879\u76EE\u6E90\u7801\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_TelescopicService\\ParametersService.cs", + "RelativeDocumentMoniker": "WIDESEAWCS_TelescopicService\\ParametersService.cs", + "ToolTip": "E:\\\u9879\u76EE\u6E90\u7801\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_TelescopicService\\ParametersService.cs", + "RelativeToolTip": "WIDESEAWCS_TelescopicService\\ParametersService.cs", + "ViewState": "AQIAAFMAAAAAAAAAAAAUwAAAAAAAAAAA", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-04-27T02:32:42.77Z" }, { "$type": "Document", "DocumentIndex": 11, "Title": "FaceRecognitionServer.cs", - "DocumentMoniker": "E:\\\u4F38\u7F29\u6746\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_TelescopicService\\FaceRecognitionServer.cs", + "DocumentMoniker": "E:\\\u9879\u76EE\u6E90\u7801\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_TelescopicService\\FaceRecognitionServer.cs", "RelativeDocumentMoniker": "WIDESEAWCS_TelescopicService\\FaceRecognitionServer.cs", - "ToolTip": "E:\\\u4F38\u7F29\u6746\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_TelescopicService\\FaceRecognitionServer.cs", + "ToolTip": "E:\\\u9879\u76EE\u6E90\u7801\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_TelescopicService\\FaceRecognitionServer.cs", "RelativeToolTip": "WIDESEAWCS_TelescopicService\\FaceRecognitionServer.cs", - "ViewState": "AgIAAAAAAAAAAAAAAADwvwAAAAAAAAAAAAAAAA==", + "ViewState": "AQIAAAAAAAAAAAAAAAAAABIAAAAAAAAA", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2025-04-08T03:12:20.085Z" - }, - { - "$type": "Document", - "DocumentIndex": 6, - "Title": "AlarmResetHsyController.cs", - "DocumentMoniker": "E:\\\u4F38\u7F29\u6746\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Controllers\\Telescopic\\AlarmResetHsyController.cs", - "RelativeDocumentMoniker": "WIDESEAWCS_Server\\Controllers\\Telescopic\\AlarmResetHsyController.cs", - "ToolTip": "E:\\\u4F38\u7F29\u6746\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Controllers\\Telescopic\\AlarmResetHsyController.cs", - "RelativeToolTip": "WIDESEAWCS_Server\\Controllers\\Telescopic\\AlarmResetHsyController.cs", - "ViewState": "AgIAAAAAAAAAAAAAAAAAAAgAAAAiAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2025-04-25T06:42:50.119Z" - }, - { - "$type": "Document", - "DocumentIndex": 8, - "Title": "Dt_AlarmResetHsy.cs", - "DocumentMoniker": "E:\\\u4F38\u7F29\u6746\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Model\\Models\\Telescopic\\Dt_AlarmResetHsy.cs", - "RelativeDocumentMoniker": "WIDESEAWCS_Model\\Models\\Telescopic\\Dt_AlarmResetHsy.cs", - "ToolTip": "E:\\\u4F38\u7F29\u6746\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Model\\Models\\Telescopic\\Dt_AlarmResetHsy.cs", - "RelativeToolTip": "WIDESEAWCS_Model\\Models\\Telescopic\\Dt_AlarmResetHsy.cs", - "ViewState": "AgIAAAwAAAAAAAAAAADwvw8AAAAjAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2025-04-25T06:21:18.958Z" + "WhenOpened": "2025-04-27T02:32:36.39Z" }, { "$type": "Document", "DocumentIndex": 9, - "Title": "AlarmResetHsyServer.cs", - "DocumentMoniker": "E:\\\u4F38\u7F29\u6746\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_TelescopicService\\AlarmResetHsyServer.cs", - "RelativeDocumentMoniker": "WIDESEAWCS_TelescopicService\\AlarmResetHsyServer.cs", - "ToolTip": "E:\\\u4F38\u7F29\u6746\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_TelescopicService\\AlarmResetHsyServer.cs", - "RelativeToolTip": "WIDESEAWCS_TelescopicService\\AlarmResetHsyServer.cs", - "ViewState": "AgIAABIAAAAAAAAAAAAQwB8AAAAsAAAAAAAAAA==", + "Title": "BaiDuFaceHelper.cs", + "DocumentMoniker": "E:\\\u9879\u76EE\u6E90\u7801\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Common\\BaiDuFaceHelper.cs", + "RelativeDocumentMoniker": "WIDESEAWCS_Common\\BaiDuFaceHelper.cs", + "ToolTip": "E:\\\u9879\u76EE\u6E90\u7801\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Common\\BaiDuFaceHelper.cs", + "RelativeToolTip": "WIDESEAWCS_Common\\BaiDuFaceHelper.cs", + "ViewState": "AQIAAAAAAAAAAAAAAAAuwAwAAAAgAAAA", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2025-04-25T06:40:56.943Z" - }, - { - "$type": "Document", - "DocumentIndex": 12, - "Title": "IMaintenanceTeamService.cs", - "DocumentMoniker": "E:\\\u4F38\u7F29\u6746\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_ITelescopicService\\IMaintenanceTeamService.cs", - "RelativeDocumentMoniker": "WIDESEAWCS_ITelescopicService\\IMaintenanceTeamService.cs", - "ToolTip": "E:\\\u4F38\u7F29\u6746\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_ITelescopicService\\IMaintenanceTeamService.cs", - "RelativeToolTip": "WIDESEAWCS_ITelescopicService\\IMaintenanceTeamService.cs", - "ViewState": "AgIAAAkAAAAAAAAAAAAswBYAAABOAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2025-04-07T08:57:55.497Z" + "WhenOpened": "2025-04-27T02:31:43.641Z" }, { "$type": "Document", "DocumentIndex": 13, - "Title": "MaintenanceTeamService.cs", - "DocumentMoniker": "E:\\\u4F38\u7F29\u6746\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_TelescopicService\\MaintenanceTeamService.cs", - "RelativeDocumentMoniker": "WIDESEAWCS_TelescopicService\\MaintenanceTeamService.cs", - "ToolTip": "E:\\\u4F38\u7F29\u6746\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_TelescopicService\\MaintenanceTeamService.cs", - "RelativeToolTip": "WIDESEAWCS_TelescopicService\\MaintenanceTeamService.cs", - "ViewState": "AgIAABAAAAAAAAAAAAAywB4AAAASAAAAAAAAAA==", + "Title": "FaceTrack.cs", + "DocumentMoniker": "E:\\\u9879\u76EE\u6E90\u7801\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Common\\FaceAI\\FaceTrack.cs", + "RelativeDocumentMoniker": "WIDESEAWCS_Common\\FaceAI\\FaceTrack.cs", + "ToolTip": "E:\\\u9879\u76EE\u6E90\u7801\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Common\\FaceAI\\FaceTrack.cs", + "RelativeToolTip": "WIDESEAWCS_Common\\FaceAI\\FaceTrack.cs", + "ViewState": "AQIAAAAAAAAAAAAAAAAAAAYAAAAQAAAA", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2025-04-07T08:11:35.284Z" + "WhenOpened": "2025-04-27T02:23:48.682Z" }, { "$type": "Document", - "DocumentIndex": 14, - "Title": "ParametersService.cs", - "DocumentMoniker": "E:\\\u4F38\u7F29\u6746\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_TelescopicService\\ParametersService.cs", - "RelativeDocumentMoniker": "WIDESEAWCS_TelescopicService\\ParametersService.cs", - "ToolTip": "E:\\\u4F38\u7F29\u6746\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_TelescopicService\\ParametersService.cs", - "RelativeToolTip": "WIDESEAWCS_TelescopicService\\ParametersService.cs", - "ViewState": "AgIAABEAAAAAAAAAAAAQwEQAAAAAAAAAAAAAAA==", + "DocumentIndex": 12, + "Title": "ImageUtil.cs", + "DocumentMoniker": "E:\\\u9879\u76EE\u6E90\u7801\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Common\\FaceAI\\ImageUtil.cs", + "RelativeDocumentMoniker": "WIDESEAWCS_Common\\FaceAI\\ImageUtil.cs", + "ToolTip": "E:\\\u9879\u76EE\u6E90\u7801\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Common\\FaceAI\\ImageUtil.cs", + "RelativeToolTip": "WIDESEAWCS_Common\\FaceAI\\ImageUtil.cs", + "ViewState": "AQIAAC0AAAAAAAAAAAAIwEIAAAALAAAA", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2025-04-08T00:57:10.872Z" - }, - { - "$type": "Document", - "DocumentIndex": 15, - "Title": "ParametersController.cs", - "DocumentMoniker": "E:\\\u4F38\u7F29\u6746\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Controllers\\Telescopic\\ParametersController.cs", - "RelativeDocumentMoniker": "WIDESEAWCS_Server\\Controllers\\Telescopic\\ParametersController.cs", - "ToolTip": "E:\\\u4F38\u7F29\u6746\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Controllers\\Telescopic\\ParametersController.cs", - "RelativeToolTip": "WIDESEAWCS_Server\\Controllers\\Telescopic\\ParametersController.cs", - "ViewState": "AgIAAA4AAAAAAAAAAAAAwCkAAAAlAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2025-04-16T02:28:53.873Z" - }, - { - "$type": "Document", - "DocumentIndex": 16, - "Title": "Dt_Parameters.cs", - "DocumentMoniker": "E:\\\u4F38\u7F29\u6746\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Model\\Models\\Telescopic\\Dt_Parameters.cs", - "RelativeDocumentMoniker": "WIDESEAWCS_Model\\Models\\Telescopic\\Dt_Parameters.cs", - "ToolTip": "E:\\\u4F38\u7F29\u6746\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Model\\Models\\Telescopic\\Dt_Parameters.cs", - "RelativeToolTip": "WIDESEAWCS_Model\\Models\\Telescopic\\Dt_Parameters.cs", - "ViewState": "AgIAAAsAAAAAAAAAAAAwwAAAAAAAAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2025-04-11T02:21:27.75Z" - }, - { - "$type": "Document", - "DocumentIndex": 17, - "Title": "WIDESEAWCS_Tasks.csproj", - "DocumentMoniker": "E:\\\u4F38\u7F29\u6746\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj", - "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj", - "ToolTip": "E:\\\u4F38\u7F29\u6746\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj", - "RelativeToolTip": "WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj", - "ViewState": "AgIAAAAAAAAAAAAAAAAAAAkAAABCAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000758|", - "WhenOpened": "2025-04-25T07:09:10.764Z" - }, - { - "$type": "Document", - "DocumentIndex": 18, - "Title": "LoginhsyController.cs", - "DocumentMoniker": "E:\\\u4F38\u7F29\u6746\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Controllers\\Telescopic\\LoginhsyController.cs", - "RelativeDocumentMoniker": "WIDESEAWCS_Server\\Controllers\\Telescopic\\LoginhsyController.cs", - "ToolTip": "E:\\\u4F38\u7F29\u6746\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Controllers\\Telescopic\\LoginhsyController.cs", - "RelativeToolTip": "WIDESEAWCS_Server\\Controllers\\Telescopic\\LoginhsyController.cs", - "ViewState": "AgIAAAAAAAAAAAAAAAAAABYAAAAQAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2025-04-07T09:00:37.146Z" - }, - { - "$type": "Document", - "DocumentIndex": 20, - "Title": "Dt_FaceRecognition.cs", - "DocumentMoniker": "E:\\\u4F38\u7F29\u6746\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Model\\Models\\Telescopic\\Dt_FaceRecognition.cs", - "RelativeDocumentMoniker": "WIDESEAWCS_Model\\Models\\Telescopic\\Dt_FaceRecognition.cs", - "ToolTip": "E:\\\u4F38\u7F29\u6746\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Model\\Models\\Telescopic\\Dt_FaceRecognition.cs", - "RelativeToolTip": "WIDESEAWCS_Model\\Models\\Telescopic\\Dt_FaceRecognition.cs", - "ViewState": "AgIAAAYAAAAAAAAAAADwvxcAAAAGAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2025-04-11T02:21:29.966Z" - }, - { - "$type": "Document", - "DocumentIndex": 21, - "Title": "Dt_Maintenance.cs", - "DocumentMoniker": "E:\\\u4F38\u7F29\u6746\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Model\\Models\\Telescopic\\Dt_Maintenance.cs", - "RelativeDocumentMoniker": "WIDESEAWCS_Model\\Models\\Telescopic\\Dt_Maintenance.cs", - "ToolTip": "E:\\\u4F38\u7F29\u6746\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Model\\Models\\Telescopic\\Dt_Maintenance.cs", - "RelativeToolTip": "WIDESEAWCS_Model\\Models\\Telescopic\\Dt_Maintenance.cs", - "ViewState": "AgIAAAAAAAAAAAAAAAAAAAsAAAAsAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2025-04-09T02:16:51.887Z" - }, - { - "$type": "Document", - "DocumentIndex": 19, - "Title": "IFaceRecognitionServer .cs", - "DocumentMoniker": "E:\\\u4F38\u7F29\u6746\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_ITelescopicService\\IFaceRecognitionServer .cs", - "RelativeDocumentMoniker": "WIDESEAWCS_ITelescopicService\\IFaceRecognitionServer .cs", - "ToolTip": "E:\\\u4F38\u7F29\u6746\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_ITelescopicService\\IFaceRecognitionServer .cs", - "RelativeToolTip": "WIDESEAWCS_ITelescopicService\\IFaceRecognitionServer .cs", - "ViewState": "AgIAAAAAAAAAAAAAAADwvwsAAAAlAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2025-04-07T08:20:24.254Z" - }, - { - "$type": "Document", - "DocumentIndex": 22, - "Title": "OHTJob.cs", - "DocumentMoniker": "E:\\\u4F38\u7F29\u6746\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\OHT\\OHTJob.cs", - "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\OHT\\OHTJob.cs", - "ToolTip": "E:\\\u4F38\u7F29\u6746\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\OHT\\OHTJob.cs", - "RelativeToolTip": "WIDESEAWCS_Tasks\\OHT\\OHTJob.cs", - "ViewState": "AgIAAC0BAAAAAAAAAAAkwAAAAAAAAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2025-04-25T03:39:57.683Z" - }, - { - "$type": "Document", - "DocumentIndex": 24, - "Title": "IParametersService.cs", - "DocumentMoniker": "E:\\\u4F38\u7F29\u6746\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_ITelescopicService\\IParametersService.cs", - "RelativeDocumentMoniker": "WIDESEAWCS_ITelescopicService\\IParametersService.cs", - "ToolTip": "E:\\\u4F38\u7F29\u6746\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_ITelescopicService\\IParametersService.cs", - "RelativeToolTip": "WIDESEAWCS_ITelescopicService\\IParametersService.cs", - "ViewState": "AgIAAA4AAAAAAAAAAAAIwB4AAAAMAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2025-04-08T02:55:53.764Z" - }, - { - "$type": "Document", - "DocumentIndex": 25, - "Title": "IMaintenanceService.cs", - "DocumentMoniker": "E:\\\u4F38\u7F29\u6746\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_ITelescopicService\\IMaintenanceService.cs", - "RelativeDocumentMoniker": "WIDESEAWCS_ITelescopicService\\IMaintenanceService.cs", - "ToolTip": "E:\\\u4F38\u7F29\u6746\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_ITelescopicService\\IMaintenanceService.cs", - "RelativeToolTip": "WIDESEAWCS_ITelescopicService\\IMaintenanceService.cs", - "ViewState": "AgIAABsAAAAAAAAAAAAswDsAAAAhAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2025-04-07T08:20:27.319Z" - }, - { - "$type": "Document", - "DocumentIndex": 23, - "Title": "OHTEnum.cs", - "DocumentMoniker": "E:\\\u4F38\u7F29\u6746\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\OHT\\OHTEnum.cs", - "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\OHT\\OHTEnum.cs", - "ToolTip": "E:\\\u4F38\u7F29\u6746\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\OHT\\OHTEnum.cs", - "RelativeToolTip": "WIDESEAWCS_Tasks\\OHT\\OHTEnum.cs", - "ViewState": "AgIAAEAAAAAAAAAAAAAQwAAAAAAAAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2025-04-16T02:29:35.57Z" - }, - { - "$type": "Document", - "DocumentIndex": 26, - "Title": "ILoginhsyService.cs", - "DocumentMoniker": "E:\\\u4F38\u7F29\u6746\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_ITelescopicService\\ILoginhsyService.cs", - "RelativeDocumentMoniker": "WIDESEAWCS_ITelescopicService\\ILoginhsyService.cs", - "ToolTip": "E:\\\u4F38\u7F29\u6746\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_ITelescopicService\\ILoginhsyService.cs", - "RelativeToolTip": "WIDESEAWCS_ITelescopicService\\ILoginhsyService.cs", - "ViewState": "AgIAAAkAAAAAAAAAAAAAABUAAABBAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2025-04-07T08:20:25.166Z" - }, - { - "$type": "Document", - "DocumentIndex": 27, - "Title": "LocationInfoService.cs", - "DocumentMoniker": "E:\\\u4F38\u7F29\u6746\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_WMSPart\\LocationInfoService.cs", - "RelativeDocumentMoniker": "WIDESEAWCS_WMSPart\\LocationInfoService.cs", - "ToolTip": "E:\\\u4F38\u7F29\u6746\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_WMSPart\\LocationInfoService.cs", - "RelativeToolTip": "WIDESEAWCS_WMSPart\\LocationInfoService.cs", - "ViewState": "AgIAAKYAAAAAAAAAAAAmwK8AAAANAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2025-04-21T07:03:59.4Z" - }, - { - "$type": "Document", - "DocumentIndex": 29, - "Title": "StockInfoService.cs", - "DocumentMoniker": "E:\\\u4F38\u7F29\u6746\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_WMSPart\\StockInfoService.cs", - "RelativeDocumentMoniker": "WIDESEAWCS_WMSPart\\StockInfoService.cs", - "ToolTip": "E:\\\u4F38\u7F29\u6746\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_WMSPart\\StockInfoService.cs", - "RelativeToolTip": "WIDESEAWCS_WMSPart\\StockInfoService.cs", - "ViewState": "AgIAAAAAAAAAAAAAAADwvwAAAAAAAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2025-04-21T07:03:53.753Z" - }, - { - "$type": "Document", - "DocumentIndex": 28, - "Title": "StockInfoDetailService.cs", - "DocumentMoniker": "E:\\\u4F38\u7F29\u6746\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_WMSPart\\StockInfoDetailService.cs", - "RelativeDocumentMoniker": "WIDESEAWCS_WMSPart\\StockInfoDetailService.cs", - "ToolTip": "E:\\\u4F38\u7F29\u6746\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_WMSPart\\StockInfoDetailService.cs", - "RelativeToolTip": "WIDESEAWCS_WMSPart\\StockInfoDetailService.cs", - "ViewState": "AgIAAAAAAAAAAAAAAADwvwAAAAAAAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2025-04-21T07:03:57.358Z" - }, - { - "$type": "Document", - "DocumentIndex": 31, - "Title": "LocationInfoController.cs", - "DocumentMoniker": "E:\\\u4F38\u7F29\u6746\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Controllers\\WMSPart\\LocationInfoController.cs", - "RelativeDocumentMoniker": "WIDESEAWCS_Server\\Controllers\\WMSPart\\LocationInfoController.cs", - "ToolTip": "E:\\\u4F38\u7F29\u6746\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Controllers\\WMSPart\\LocationInfoController.cs", - "RelativeToolTip": "WIDESEAWCS_Server\\Controllers\\WMSPart\\LocationInfoController.cs", - "ViewState": "AgIAAAwAAAAAAAAAAADwvxIAAAATAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2025-04-21T05:44:52.618Z" - }, - { - "$type": "Document", - "DocumentIndex": 32, - "Title": "TaskService.cs", - "DocumentMoniker": "E:\\\u4F38\u7F29\u6746\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_TaskInfoService\\TaskService.cs", - "RelativeDocumentMoniker": "WIDESEAWCS_TaskInfoService\\TaskService.cs", - "ToolTip": "E:\\\u4F38\u7F29\u6746\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_TaskInfoService\\TaskService.cs", - "RelativeToolTip": "WIDESEAWCS_TaskInfoService\\TaskService.cs", - "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2025-04-21T05:44:32.387Z" - }, - { - "$type": "Document", - "DocumentIndex": 30, - "Title": "LoginhsyService.cs", - "DocumentMoniker": "E:\\\u4F38\u7F29\u6746\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_TelescopicService\\LoginhsyService.cs", - "RelativeDocumentMoniker": "WIDESEAWCS_TelescopicService\\LoginhsyService.cs", - "ToolTip": "E:\\\u4F38\u7F29\u6746\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_TelescopicService\\LoginhsyService.cs", - "RelativeToolTip": "WIDESEAWCS_TelescopicService\\LoginhsyService.cs", - "ViewState": "AgIAABgAAAAAAAAAAABPwCoAAABHAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2025-04-07T08:45:18.979Z" - }, - { - "$type": "Document", - "DocumentIndex": 33, - "Title": "TaskhtyService.cs", - "DocumentMoniker": "E:\\\u4F38\u7F29\u6746\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_TaskInfoService\\TaskhtyService.cs", - "RelativeDocumentMoniker": "WIDESEAWCS_TaskInfoService\\TaskhtyService.cs", - "ToolTip": "E:\\\u4F38\u7F29\u6746\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_TaskInfoService\\TaskhtyService.cs", - "RelativeToolTip": "WIDESEAWCS_TaskInfoService\\TaskhtyService.cs", - "ViewState": "AgIAAAAAAAAAAAAAAADwvwAAAAAAAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2025-04-21T05:44:31.722Z" - }, - { - "$type": "Document", - "DocumentIndex": 34, - "Title": "TaskExecuteDetailService.cs", - "DocumentMoniker": "E:\\\u4F38\u7F29\u6746\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_TaskInfoService\\TaskExecuteDetailService.cs", - "RelativeDocumentMoniker": "WIDESEAWCS_TaskInfoService\\TaskExecuteDetailService.cs", - "ToolTip": "E:\\\u4F38\u7F29\u6746\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_TaskInfoService\\TaskExecuteDetailService.cs", - "RelativeToolTip": "WIDESEAWCS_TaskInfoService\\TaskExecuteDetailService.cs", - "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2025-04-21T05:44:30.802Z" - }, - { - "$type": "Document", - "DocumentIndex": 35, - "Title": "ITaskhtyService.cs", - "DocumentMoniker": "E:\\\u4F38\u7F29\u6746\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_ITaskInfoService\\ITaskhtyService.cs", - "RelativeDocumentMoniker": "WIDESEAWCS_ITaskInfoService\\ITaskhtyService.cs", - "ToolTip": "E:\\\u4F38\u7F29\u6746\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_ITaskInfoService\\ITaskhtyService.cs", - "RelativeToolTip": "WIDESEAWCS_ITaskInfoService\\ITaskhtyService.cs", - "ViewState": "AgIAAAAAAAAAAAAAAADwvwAAAAAAAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2025-04-21T05:44:28.126Z" - }, - { - "$type": "Document", - "DocumentIndex": 36, - "Title": "ITaskExecuteDetailService.cs", - "DocumentMoniker": "E:\\\u4F38\u7F29\u6746\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_ITaskInfoService\\ITaskExecuteDetailService.cs", - "RelativeDocumentMoniker": "WIDESEAWCS_ITaskInfoService\\ITaskExecuteDetailService.cs", - "ToolTip": "E:\\\u4F38\u7F29\u6746\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_ITaskInfoService\\ITaskExecuteDetailService.cs", - "RelativeToolTip": "WIDESEAWCS_ITaskInfoService\\ITaskExecuteDetailService.cs", - "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2025-04-21T05:44:25.811Z" - }, - { - "$type": "Document", - "DocumentIndex": 38, - "Title": "DeviceInfoController.cs", - "DocumentMoniker": "E:\\\u4F38\u7F29\u6746\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Controllers\\QuartzJob\\DeviceInfoController.cs", - "RelativeDocumentMoniker": "WIDESEAWCS_Server\\Controllers\\QuartzJob\\DeviceInfoController.cs", - "ToolTip": "E:\\\u4F38\u7F29\u6746\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Controllers\\QuartzJob\\DeviceInfoController.cs", - "RelativeToolTip": "WIDESEAWCS_Server\\Controllers\\QuartzJob\\DeviceInfoController.cs", - "ViewState": "AgIAAAAAAAAAAAAAAAAAAAwAAAABAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2025-04-16T02:32:15.164Z" - }, - { - "$type": "Document", - "DocumentIndex": 37, - "Title": "GZJJob.cs", - "DocumentMoniker": "E:\\\u4F38\u7F29\u6746\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\GZJ\\GZJJob.cs", - "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\GZJ\\GZJJob.cs", - "ToolTip": "E:\\\u4F38\u7F29\u6746\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\GZJ\\GZJJob.cs", - "RelativeToolTip": "WIDESEAWCS_Tasks\\GZJ\\GZJJob.cs", - "ViewState": "AgIAAB4AAAAAAAAAAABIwAAAAAAAAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2025-04-16T02:29:23.036Z" - }, - { - "$type": "Document", - "DocumentIndex": 44, - "Title": "MaintenanceController.cs", - "DocumentMoniker": "E:\\\u4F38\u7F29\u6746\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Controllers\\Telescopic\\MaintenanceController.cs", - "RelativeDocumentMoniker": "WIDESEAWCS_Server\\Controllers\\Telescopic\\MaintenanceController.cs", - "ToolTip": "E:\\\u4F38\u7F29\u6746\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Controllers\\Telescopic\\MaintenanceController.cs", - "RelativeToolTip": "WIDESEAWCS_Server\\Controllers\\Telescopic\\MaintenanceController.cs", - "ViewState": "AgIAAEEAAAAAAAAAAAAcwFUAAAAzAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2025-04-07T09:02:48.767Z" - }, - { - "$type": "Document", - "DocumentIndex": 39, - "Title": "BatchController.cs", - "DocumentMoniker": "E:\\\u4F38\u7F29\u6746\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Controllers\\System\\BatchController.cs", - "RelativeDocumentMoniker": "WIDESEAWCS_Server\\Controllers\\System\\BatchController.cs", - "ToolTip": "E:\\\u4F38\u7F29\u6746\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Controllers\\System\\BatchController.cs", - "RelativeToolTip": "WIDESEAWCS_Server\\Controllers\\System\\BatchController.cs", - "ViewState": "AgIAACEAAAAAAAAAAAAcwC0AAAAWAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2025-04-07T08:13:37.986Z" - }, - { - "$type": "Document", - "DocumentIndex": 48, - "Title": "AddUserDTO.cs", - "DocumentMoniker": "E:\\\u4F38\u7F29\u6746\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_DTO\\System\\AddUserDTO.cs", - "RelativeDocumentMoniker": "WIDESEAWCS_DTO\\System\\AddUserDTO.cs", - "ToolTip": "E:\\\u4F38\u7F29\u6746\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_DTO\\System\\AddUserDTO.cs", - "RelativeToolTip": "WIDESEAWCS_DTO\\System\\AddUserDTO.cs", - "ViewState": "AgIAAAAAAAAAAAAAAADwvwAAAAAAAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2025-04-11T03:39:28.112Z" - }, - { - "$type": "Document", - "DocumentIndex": 41, - "Title": "Sys_UserController.cs", - "DocumentMoniker": "E:\\\u4F38\u7F29\u6746\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Controllers\\System\\Sys_UserController.cs", - "RelativeDocumentMoniker": "WIDESEAWCS_Server\\Controllers\\System\\Sys_UserController.cs", - "ToolTip": "E:\\\u4F38\u7F29\u6746\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Controllers\\System\\Sys_UserController.cs", - "RelativeToolTip": "WIDESEAWCS_Server\\Controllers\\System\\Sys_UserController.cs", - "ViewState": "AgIAAN0AAAAAAAAAAABIwO8AAAAzAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2025-04-08T01:03:30.746Z" - }, - { - "$type": "Document", - "DocumentIndex": 40, - "Title": "ISys_UserService.cs", - "DocumentMoniker": "E:\\\u4F38\u7F29\u6746\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_ISystemServices\\ISys_UserService.cs", - "RelativeDocumentMoniker": "WIDESEAWCS_ISystemServices\\ISys_UserService.cs", - "ToolTip": "E:\\\u4F38\u7F29\u6746\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_ISystemServices\\ISys_UserService.cs", - "RelativeToolTip": "WIDESEAWCS_ISystemServices\\ISys_UserService.cs", - "ViewState": "AgIAAAAAAAAAAAAAAAAAABEAAAA2AAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2025-04-08T01:02:33.62Z" - }, - { - "$type": "Document", - "DocumentIndex": 49, - "Title": "Sys_User.cs", - "DocumentMoniker": "E:\\\u4F38\u7F29\u6746\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Model\\Models\\System\\Sys_User.cs", - "RelativeDocumentMoniker": "WIDESEAWCS_Model\\Models\\System\\Sys_User.cs", - "ToolTip": "E:\\\u4F38\u7F29\u6746\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Model\\Models\\System\\Sys_User.cs", - "RelativeToolTip": "WIDESEAWCS_Model\\Models\\System\\Sys_User.cs", - "ViewState": "AgIAAAAAAAAAAAAAAADwvwAAAAAAAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2025-04-11T03:40:33.616Z" - }, - { - "$type": "Document", - "DocumentIndex": 42, - "Title": "appsettings.json", - "DocumentMoniker": "E:\\\u4F38\u7F29\u6746\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\appsettings.json", - "RelativeDocumentMoniker": "WIDESEAWCS_Server\\appsettings.json", - "ToolTip": "E:\\\u4F38\u7F29\u6746\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\appsettings.json", - "RelativeToolTip": "WIDESEAWCS_Server\\appsettings.json", - "ViewState": "AgIAAAAAAAAAAAAAAAAAAAoAAAAnAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001642|", - "WhenOpened": "2025-04-09T08:11:07.528Z" - }, - { - "$type": "Document", - "DocumentIndex": 43, - "Title": "MaintenanceService.cs", - "DocumentMoniker": "E:\\\u4F38\u7F29\u6746\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_TelescopicService\\MaintenanceService.cs", - "RelativeDocumentMoniker": "WIDESEAWCS_TelescopicService\\MaintenanceService.cs", - "ToolTip": "E:\\\u4F38\u7F29\u6746\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_TelescopicService\\MaintenanceService.cs", - "RelativeToolTip": "WIDESEAWCS_TelescopicService\\MaintenanceService.cs", - "ViewState": "AgIAAAEBAAAAAAAAAAAowEoBAABWAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2025-04-07T08:11:35.497Z" - }, - { - "$type": "Document", - "DocumentIndex": 45, - "Title": "MaintenanceTeamController.cs", - "DocumentMoniker": "E:\\\u4F38\u7F29\u6746\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Controllers\\Telescopic\\MaintenanceTeamController.cs", - "RelativeDocumentMoniker": "WIDESEAWCS_Server\\Controllers\\Telescopic\\MaintenanceTeamController.cs", - "ToolTip": "E:\\\u4F38\u7F29\u6746\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Controllers\\Telescopic\\MaintenanceTeamController.cs", - "RelativeToolTip": "WIDESEAWCS_Server\\Controllers\\Telescopic\\MaintenanceTeamController.cs", - "ViewState": "AgIAAAcAAAAAAAAAAAAEwB4AAAAzAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2025-04-07T09:04:39.138Z" - }, - { - "$type": "Document", - "DocumentIndex": 46, - "Title": "PaginationDTO.cs", - "DocumentMoniker": "E:\\\u4F38\u7F29\u6746\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_DTO\\Telescopic\\PaginationDTO.cs", - "RelativeDocumentMoniker": "WIDESEAWCS_DTO\\Telescopic\\PaginationDTO.cs", - "ToolTip": "E:\\\u4F38\u7F29\u6746\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_DTO\\Telescopic\\PaginationDTO.cs", - "RelativeToolTip": "WIDESEAWCS_DTO\\Telescopic\\PaginationDTO.cs", - "ViewState": "AgIAAB0AAAAAAAAAAAAgwAgAAAARAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2025-04-08T02:27:59.467Z" - }, - { - "$type": "Document", - "DocumentIndex": 47, - "Title": "Dt_Loginhsy.cs", - "DocumentMoniker": "E:\\\u4F38\u7F29\u6746\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Model\\Models\\Telescopic\\Dt_Loginhsy.cs", - "RelativeDocumentMoniker": "WIDESEAWCS_Model\\Models\\Telescopic\\Dt_Loginhsy.cs", - "ToolTip": "E:\\\u4F38\u7F29\u6746\\ShenSuoGanKongZhi\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Model\\Models\\Telescopic\\Dt_Loginhsy.cs", - "RelativeToolTip": "WIDESEAWCS_Model\\Models\\Telescopic\\Dt_Loginhsy.cs", - "ViewState": "AgIAABMAAAAAAAAAAAAiwCMAAABEAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2025-04-08T01:06:18.439Z" + "WhenOpened": "2025-04-27T02:24:11.264Z" } ] } diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/BaiDuFaceHelper.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/BaiDuFaceHelper.cs" index 4710227..067fd8d 100644 --- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/BaiDuFaceHelper.cs" +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/BaiDuFaceHelper.cs" @@ -6,11 +6,13 @@ using System.Net; using System.Text; using System.Threading.Tasks; +using FaceAI; namespace WIDESEAWCS_Common { public class BaiDuFaceHelper { + #region 浜鸿劯璇嗗埆API /// <summary> /// 鑾峰彇AccessToken /// </summary> @@ -62,7 +64,7 @@ catch { return ""; } } - + /// <summary> /// 浜鸿劯妫�娴嬩笌灞炴�у垎鏋� /// </summary> @@ -76,7 +78,7 @@ HttpWebRequest request = (HttpWebRequest)WebRequest.Create(host); request.Method = "POST"; request.KeepAlive = true; - String str = "{\"image\":\""+ imgbase64 + "\",\"image_type\":\"BASE64\"}"; + String str = "{\"image\":\"" + imgbase64 + "\",\"image_type\":\"BASE64\"}"; byte[] buffer = encoding.GetBytes(str); request.ContentLength = buffer.Length; request.GetRequestStream().Write(buffer, 0, buffer.Length); @@ -101,7 +103,7 @@ HttpWebRequest request = (HttpWebRequest)WebRequest.Create(host); request.Method = "post"; request.KeepAlive = true; - String str = "{\"group_id\":\""+ group + "\"}"; + String str = "{\"group_id\":\"" + group + "\"}"; byte[] buffer = encoding.GetBytes(str); request.ContentLength = buffer.Length; request.GetRequestStream().Write(buffer, 0, buffer.Length); @@ -172,7 +174,7 @@ string result = reader.ReadToEnd(); NLog.LogManager.GetCurrentClassLogger().Trace("浜鸿劯娉ㄥ唽锛�" + result); - CreateUserResult res= JsonConvert.DeserializeObject<CreateUserResult>(result);//闇�瑕佸皢log_id鍜宖ace_token淇濆瓨鍒扮敤鎴疯〃涓紝鍦ㄤ汉鑴稿垹闄や腑闇�瑕佺敤鍒� + CreateUserResult res = JsonConvert.DeserializeObject<CreateUserResult>(result);//闇�瑕佸皢log_id鍜宖ace_token淇濆瓨鍒扮敤鎴疯〃涓紝鍦ㄤ汉鑴稿垹闄や腑闇�瑕佺敤鍒� return res; } @@ -229,7 +231,7 @@ /// 浜鸿劯鎼滅储 /// </summary> /// <returns></returns> - public static SearchResult FaceSearch(string path,string group_id_list) + public static SearchResult FaceSearch(string path, string group_id_list) { string token = GetAccessToken(); var imgbase64 = GetFileContentAsBase64(path); @@ -239,7 +241,7 @@ HttpWebRequest request = (HttpWebRequest)WebRequest.Create(host); request.Method = "POST"; request.KeepAlive = true; - String str = "{\"image\":\"" + imgbase64 + "\",\"image_type\":\"BASE64\",\"group_id_list\":\""+ group_id_list + "\",\"quality_control\":\"LOW\",\"liveness_control\":\"NORMAL\"}"; + String str = "{\"image\":\"" + imgbase64 + "\",\"image_type\":\"BASE64\",\"group_id_list\":\"" + group_id_list + "\",\"quality_control\":\"LOW\",\"liveness_control\":\"NORMAL\"}"; byte[] buffer = encoding.GetBytes(str); request.ContentLength = buffer.Length; request.GetRequestStream().Write(buffer, 0, buffer.Length); @@ -252,6 +254,7 @@ return searchResult; } + #endregion } diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/FaceAI/DevEnum.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/FaceAI/DevEnum.cs" new file mode 100644 index 0000000..dc3bd47 --- /dev/null +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/FaceAI/DevEnum.cs" @@ -0,0 +1,191 @@ +锘縰sing System; +using System.Collections; +using System.Runtime.InteropServices; +using System.Runtime.InteropServices.ComTypes; + +namespace FaceAI +{ + [ComVisible(false)] + public class FilterCategory // uuids.h : CLSID_* + { + /// <summary> CLSID_AudioInputDeviceCategory, audio capture category </summary> + public static readonly Guid AudioInputDevice = new Guid(0x33d9a762, 0x90c8, 0x11d0, 0xbd, 0x43, 0x00, 0xa0, 0xc9, 0x11, 0xce, 0x86); + + /// <summary> CLSID_VideoInputDeviceCategory, video capture category </summary> + public static readonly Guid VideoInputDevice = new Guid(0x860BB310, 0x5D01, 0x11d0, 0xBD, 0x3B, 0x00, 0xA0, 0xC9, 0x11, 0xCE, 0x86); + } + + [ComVisible(false)] + public class Clsid // uuids.h : CLSID_* + { + /// <summary> CLSID_SystemDeviceEnum for ICreateDevEnum </summary> + public static readonly Guid SystemDeviceEnum = new Guid(0x62BE5D10, 0x60EB, 0x11d0, 0xBD, 0x3B, 0x00, 0xA0, 0xC9, 0x11, 0xCE, 0x86); + + /// <summary> CLSID_FilterGraph, filter Graph </summary> + public static readonly Guid FilterGraph = new Guid(0xe436ebb3, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70); + + /// <summary> CLSID_CaptureGraphBuilder2, new Capture graph building </summary> + public static readonly Guid CaptureGraphBuilder2 = new Guid(0xBF87B6E1, 0x8C27, 0x11d0, 0xB3, 0xF0, 0x0, 0xAA, 0x00, 0x37, 0x61, 0xC5); + + /// <summary> CLSID_SampleGrabber, Sample Grabber filter </summary> + public static readonly Guid SampleGrabber = new Guid(0xC1F400A0, 0x3F08, 0x11D3, 0x9F, 0x0B, 0x00, 0x60, 0x08, 0x03, 0x9E, 0x37); + + /// <summary> CLSID_DvdGraphBuilder, DVD graph builder </summary> + public static readonly Guid DvdGraphBuilder = new Guid(0xFCC152B7, 0xF372, 0x11d0, 0x8E, 0x00, 0x00, 0xC0, 0x4F, 0xD7, 0xC0, 0x8B); + + } + + [ComVisible(false)] + public class DevEnum + { + public static bool GetDevicesOfCat(Guid cat, out ArrayList devs) + { + devs = null; + int hr; + object comObj = null; + ICreateDevEnum enumDev = null; + IEnumMoniker enumMon = null; + IMoniker[] mon = new IMoniker[1]; + try + { + Type srvType = Type.GetTypeFromCLSID(Clsid.SystemDeviceEnum); + if (srvType == null) + throw new NotImplementedException("System Device Enumerator"); + + comObj = Activator.CreateInstance(srvType); + enumDev = (ICreateDevEnum)comObj; + hr = enumDev.CreateClassEnumerator(ref cat, out enumMon, 0); + if (hr != 0) + throw new NotSupportedException("No devices of the category"); + + int /*f, */count = 0; + IntPtr ptr = new IntPtr(); + do + { + hr = enumMon.Next(1, mon, ptr); + if ((hr != 0) || (mon[0] == null)) + break; + DsDevice dev = new DsDevice(); + GetFriendlyName(mon[0], ref dev.Name, ref dev.Path); + if (devs == null) + devs = new ArrayList(); + dev.id = count; + dev.Mon = mon[0]; mon[0] = null; + devs.Add(dev); dev = null; + count++; + } + while (true); + + return count > 0; + } + catch (Exception) + { + if (devs != null) + { + foreach (DsDevice d in devs) + d.Dispose(); + devs = null; + } + return false; + } + finally + { + enumDev = null; + if (mon[0] != null) + Marshal.ReleaseComObject(mon[0]); mon[0] = null; + if (enumMon != null) + Marshal.ReleaseComObject(enumMon); enumMon = null; + if (comObj != null) + Marshal.ReleaseComObject(comObj); comObj = null; + } + + } + + private static bool GetFriendlyName(IMoniker mon, ref string devname, ref string devpath) + { + object bagObj = null; + IPropertyBag bag = null; + try + { + Guid bagId = typeof(IPropertyBag).GUID; + mon.BindToStorage(null, null, ref bagId, out bagObj); + bag = (IPropertyBag)bagObj; + object val = ""; + int hr = bag.Read("Description", ref val, IntPtr.Zero); + if(hr != 0) + hr = bag.Read("FriendlyName", ref val, IntPtr.Zero); + if (hr != 0) + Marshal.ThrowExceptionForHR(hr); + devname = val as string; + if ((devname == null) || (devname.Length < 1)) + throw new NotImplementedException("Device FriendlyName"); + val = ""; + hr = bag.Read("DevicePath", ref val, IntPtr.Zero); + if (hr != 0) + Marshal.ThrowExceptionForHR(hr); + devpath = val as string; + if((devpath == null) || (devpath.Length < 1)) + throw new NotImplementedException("Device Path"); + return true; + } + catch (Exception) + { + return false; + } + finally + { + bag = null; + if (bagObj != null) + Marshal.ReleaseComObject(bagObj); bagObj = null; + } + } + } + + + [ComVisible(false)] + public class DsDevice : IDisposable + { + public int id; + public string Name; + public string Path; + public IMoniker Mon; + + + public void Dispose() + { + if (Mon != null) + Marshal.ReleaseComObject(Mon); Mon = null; + } + } + + [ComVisible(true), ComImport, + Guid("29840822-5B84-11D0-BD3B-00A0C911CE86"), + InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] + public interface ICreateDevEnum + { + [PreserveSig] + int CreateClassEnumerator( + [In] ref Guid pType, + [Out] out IEnumMoniker ppEnumMoniker, + [In] int dwFlags); + } + + + + [ComVisible(true), ComImport, + Guid("55272A00-42CB-11CE-8135-00AA004BB851"), + InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] + public interface IPropertyBag + { + [PreserveSig] + int Read( + [In, MarshalAs(UnmanagedType.LPWStr)] string pszPropName, + [In, Out, MarshalAs(UnmanagedType.Struct)] ref object pVar, + IntPtr pErrorLog); + + [PreserveSig] + int Write( + [In, MarshalAs(UnmanagedType.LPWStr)] string pszPropName, + [In, MarshalAs(UnmanagedType.Struct)] ref object pVar); + } +} \ No newline at end of file diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/FaceAI/Face.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/FaceAI/Face.cs" new file mode 100644 index 0000000..c26f53a --- /dev/null +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/FaceAI/Face.cs" @@ -0,0 +1,98 @@ +锘縰sing System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Runtime.InteropServices; +using System.Drawing.Imaging; +using System.IO; +using System.Threading; +using OpenCvSharp; + +// sdk浣跨敤娉ㄦ剰浜嬮」锛屼娇鐢╯dk鍓嶏紝璇峰弬鑰冩枃妗h繘琛屾巿鏉冩縺娲伙紝鍚﹀垯 +// sdk鍒濆鍖栧彲鑳藉け璐ワ紝鍙�氳繃鎵撳紑鏃ュ織face_conf.json锛屽瓧娈垫敼涓簍rue銆� +// 鏌ユ壘鏄惁閫氳繃浜嗘巿鏉冩縺娲绘垨婵�娲诲け璐ョ殑鍘熷洜 + +// 浜鸿劯c#鍏ュ彛绫� +namespace FaceAI +{ + public class Face + { + // sdk鍒濆鍖� + [DllImport("BaiduFaceApi.dll", EntryPoint = "sdk_init", CharSet =CharSet.Ansi + , CallingConvention =CallingConvention.Cdecl)] + public static extern int sdk_init(string model_path); + // 鏄惁鎺堟潈 + [DllImport("BaiduFaceApi.dll", EntryPoint = "is_auth", CharSet = CharSet.Ansi + , CallingConvention = CallingConvention.Cdecl)] + private static extern bool is_auth(); + // sdk閿�姣� + [DllImport("BaiduFaceApi.dll", EntryPoint = "sdk_destroy" , CharSet = CharSet.Ansi + , CallingConvention = CallingConvention.Cdecl)] + private static extern void sdk_destroy(); + + // 鑾峰彇璁惧鎸囩汗 + [DllImport("BaiduFaceApi.dll", EntryPoint = "get_device_id", CharSet = CharSet.Ansi + , CallingConvention = CallingConvention.Cdecl)] + private static extern IntPtr get_device_id(); + + // 鑾峰彇sdk鐗堟湰鍙� + [DllImport("BaiduFaceApi.dll", EntryPoint = "sdk_version", CharSet = CharSet.Ansi + , CallingConvention = CallingConvention.Cdecl)] + private static extern IntPtr sdk_version(); + + // 鑾峰彇sdk淇℃伅濡傝澶囨寚绾癸紝鐗堟湰鍙� + static void get_sdk_info() + { + // 鑾峰彇璁惧鎸囩汗 + IntPtr ptr = get_device_id(); + string buf = Marshal.PtrToStringAnsi(ptr); + Console.WriteLine("device id is:" + buf); + // 鑾峰彇sdk鐗堟湰鍙� + IntPtr ptr_v = sdk_version(); + string vbuf = Marshal.PtrToStringAnsi(ptr_v); + Console.WriteLine("sdk version is:" + vbuf); + } + + // 浜鸿劯c#鍏ュ彛鏂规硶 + public static void Main() + { + //Console.WriteLine("in main"); + // model_path涓烘ā鍨嬫枃浠跺す璺緞锛屽嵆models鏂囦欢澶癸紙閲岄潰瀛樼殑鏄汉鑴歌瘑鍒殑妯″瀷鏂囦欢锛� + // 浼犵┖涓洪噰鐢ㄩ粯璁よ矾寰勶紝鑻ユ兂瀹氱疆鍖栬矾寰勶紝璇峰~鍐欏叏灞�璺緞濡傦細d:\\face 锛坢odels妯″瀷鏂囦欢澶圭洰褰曟斁缃悗涓篸:\\face\\models锛� + // 鑻ユā鍨嬫枃浠跺す閲囩敤瀹氱疆鍖栬矾寰勶紝鍒欐縺娲绘枃浠�(license.ini, license.key)涔熷彲閲囩敤瀹氬埗鍖栬矾寰勬斁缃埌璇ョ洰褰曞d:\\face\\license + // 浜﹀彲鍦ㄦ縺娲绘枃浠堕粯璁ょ敓鎴愮殑璺緞 + string model_path = null; + // string model_path="d:\\face"; + long time_begin = TimeUtil.get_time_stamp(); + int n = sdk_init(model_path); + long time_end = TimeUtil.get_time_stamp(); + Console.WriteLine("sdk init cost {0:D}", time_end- time_begin); + //鑻ユ病閫氳繃鍒濆鍖栵紝鍒檔涓嶄负0, 杩斿洖鐨勯敊璇爜鍙婂師鍥犲彲鍙傝�冭鏄庢枃妗� + if (n != 0) + { + Console.WriteLine("sdk init fail and errcode is {0:D}", n); + + Console.ReadLine(); + return; + } + + Console.WriteLine("Main: 鎴愬姛"); + // 鑾峰彇璁惧鎸囩汗 + get_sdk_info(); + // 楠岃瘉鏄惁鎺堟潈 + bool authed = is_auth(); + Console.WriteLine("authed res is:"+authed); + long t_begin = TimeUtil.get_time_stamp(); + // 浠ヤ笅涓篸emo绀轰緥,璇峰弬鑰僃aceDemo鎵撳紑鐩稿叧娉ㄩ噴娴嬭瘯楠岃瘉 + //FaceDemo demo = new FaceDemo(); + //demo.face_demo(); + long t_end = TimeUtil.get_time_stamp(); + Console.WriteLine("time cost is:"+(t_end-t_begin)); + // 浣跨敤瀹屾瘯锛岄攢姣乻dk锛岄噴鏀惧唴瀛� + sdk_destroy(); + Console.WriteLine("end main"); + Console.ReadLine(); + } + } +} diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/FaceAI/FaceAttr.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/FaceAI/FaceAttr.cs" new file mode 100644 index 0000000..54b6db7 --- /dev/null +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/FaceAI/FaceAttr.cs" @@ -0,0 +1,109 @@ +锘縰sing System; +using System.Runtime.InteropServices; +using OpenCvSharp; + +namespace FaceAI +{ + /** + * @brief 浜鸿劯琛ㄦ儏灞炴�ф灇涓� + */ + enum BDFaceAttributeEmotionType + { + BDFACE_ATTRIBUTE_EMOTION_FROWN = 0, // 鐨辩湁 + BDFACE_ATTRIBUTE_EMOTION_SMILE = 1, // 绗� + BDFACE_ATTRIBUTE_EMOTION_CALM = 2, // 骞抽潤 + }; + + /** + * @brief 浜鸿劯绉嶆棌灞炴�ф灇涓� + */ + enum BDFaceRace + { + BDFACE_RACE_YELLOW = 0, // 榛勭浜� + BDFACE_RACE_WHITE = 1, // 鐧界浜� + BDFACE_RACE_BLACK = 2, // 榛戠浜� + BDFACE_RACE_INDIAN = 3, // 鍗扮瀹変汉 + }; + + /** + * @brief 鐪奸暅鐘舵�佸睘鎬ф灇涓� + */ + enum BDFaceGlasses + { + BDFACE_NO_GLASSES = 0, // 鏃犵溂闀� + BDFACE_GLASSES = 1, // 鏈夌溂闀� + BDFACE_SUN_GLASSES = 2, // 澧ㄩ暅 + }; + + /** + * @brief 鎬у埆灞炴�ф灇涓� + */ + enum BDFaceGender + { + BDFACE_GENDER_FEMAILE = 0, // 濂虫�� + BDFACE_GENDER_MALE = 1, // 鐢锋�� + }; + + + /** + * @brief 浜鸿劯灞炴�х粨鏋勪綋 + */ + [StructLayout(LayoutKind.Sequential, Pack = 1)] + struct BDFaceAttribute + { + public int age; // 骞撮緞 + public BDFaceRace race; // 绉嶆棌 + public BDFaceAttributeEmotionType emotion; // 琛ㄦ儏 + public BDFaceGlasses glasses; // 鎴寸溂闀滅姸鎬� + public BDFaceGender gender; // 鎬у埆 + }; + + // 浜鸿劯灞炴�хず渚嬪強鎺ュ彛 + class FaceAttr + { + // 鑾峰彇浜鸿劯灞炴�� + [DllImport("BaiduFaceApi.dll", EntryPoint = "face_attr", CharSet = CharSet.Ansi + , CallingConvention = CallingConvention.Cdecl)] + public static extern int face_attr(IntPtr ptr, IntPtr mat); + + // 娴嬭瘯鑾峰彇浜鸿劯灞炴�� + public void test_get_face_attr() + { + int max_face_num = 5; // 璁剧疆鏈�澶氭娴嬭窡韪汉鏁帮紙澶氫汉鑴告娴嬶級锛岄粯璁や负1锛屾渶澶氬彲璁句负50 + + BDFaceAttribute[] attr_info = new BDFaceAttribute[max_face_num]; + int size = Marshal.SizeOf(typeof(BDFaceAttribute)); + IntPtr ptT = Marshal.AllocHGlobal(size * max_face_num); + string img_path = "../images/rgb.png"; + Mat mat = Cv2.ImRead(img_path); + int faceNum = face_attr(ptT, mat.CvPtr); + Console.WriteLine("faceNum is:" + faceNum); + for (int index = 0; index < faceNum; index++) + { + IntPtr ptr = new IntPtr(); + if (8 == IntPtr.Size) + { + ptr = (IntPtr)(ptT.ToInt64() + size * index); + } + else if (4 == IntPtr.Size) + { + ptr = (IntPtr)(ptT.ToInt32() + size * index); + } + + attr_info[index] = (BDFaceAttribute)Marshal.PtrToStructure(ptr, typeof(BDFaceAttribute)); + // 骞撮緞 + Console.WriteLine("age is {0}:", attr_info[index].age); + // 绉嶆棌 + Console.WriteLine("race is:{0}", attr_info[index].race); + // 琛ㄦ儏 + Console.WriteLine("emotion is:{0}", attr_info[index].emotion); + // 鎴寸溂闀滅姸鎬� + Console.WriteLine("glasses is:{0}", attr_info[index].glasses); + // 鎬у埆 + Console.WriteLine("gender is:{0}", attr_info[index].gender); + } + Marshal.FreeHGlobal(ptT); + } + + } +} diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/FaceAI/FaceCompare.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/FaceAI/FaceCompare.cs" new file mode 100644 index 0000000..48e2747 --- /dev/null +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/FaceAI/FaceCompare.cs" @@ -0,0 +1,781 @@ +锘縰sing System; +using System.Runtime.InteropServices; +using System.IO; +using OpenCvSharp; + +// 浜鸿劯姣斿锛堝娉細浜鸿劯姣斿锛屽疄闄呬笂鏄汉鑴哥殑鐗瑰緛鍊兼瘮瀵癸紝鎻愬彇鍑轰汉鑴哥壒寰佸�硷紝鐢╟ompare_feature鏂规硶姣斿) +namespace FaceAI +{ + // 浜鸿劯姣旇緝1:1銆�1:N銆佹娊鍙栦汉鑴哥壒寰佸�笺�佹寜鐗瑰緛鍊兼瘮杈冪瓑 + public class FaceCompare + { + // 鎻愬彇浜鸿劯鐗瑰緛鍊�(浼犲浘鐗囨枃浠惰矾寰�) + /// <summary> + /// 鎻愬彇浜鸿劯鐗瑰緛鍊硷紝涓�512涓诞鐐瑰�硷紝宸插姞瀵� + /// </summary> + /// <param name="file_name">鍥剧墖淇℃伅锛屾暟鎹ぇ灏忓皬浜�10M锛屼紶鍏ュ浘鐗囨枃浠惰矾寰�</param> + /// <param name="length">閫氳繃寮曠敤杩斿洖鐗瑰緛鍊肩殑闀垮害锛岃嫢涓�2048琛ㄧず鎻愬彇姝g‘锛屽叾浠栧�艰〃绀烘彁鍙栦簡閿欒鐨勭壒寰佸��</param> + /// <returns></returns> + [DllImport("BaiduFaceApi.dll", EntryPoint = "get_face_feature", CharSet = CharSet.Ansi + , CallingConvention = CallingConvention.Cdecl)] + private static extern IntPtr get_face_feature(string file_name, ref int length); + // 鎻愬彇浜鸿劯鐗瑰緛鍊�(浼犱簩杩涘埗鍥剧墖buffer锛� + /// <summary> + /// 鎻愬彇浜鸿劯鐗瑰緛鍊硷紝涓�2048涓猙yte (浼犲叆浜岃繘鍒跺浘鐗嘼uffer) + /// </summary> + /// <param name="buf"></param> + /// <param name="size"></param> + /// <param name="length"></param> + /// <returns></returns> + [DllImport("BaiduFaceApi.dll", EntryPoint = "get_face_feature_by_buf", CharSet = CharSet.Ansi + , CallingConvention = CallingConvention.Cdecl)] + private static extern IntPtr get_face_feature_by_buf(byte[] buf, int size, ref int length); + //// 鑾峰彇浜鸿劯鐗瑰緛鍊硷紙浼犲叆opencv瑙嗛甯у強浜鸿劯淇℃伅锛岄�傚簲浜庡浜鸿劯锛� + ///// <summary> + ///// 鑾峰彇浜鸿劯鐗瑰緛鍊硷紙浼犲叆opencv瑙嗛甯у強浜鸿劯淇℃伅锛岄�傚簲浜庡浜鸿劯锛� + ///// </summary> + ///// <param name="mat"></param> + ///// <param name="info"></param> + ///// <param name="feaptr"></param> + ///// <returns></returns> + //[DllImport("BaiduFaceApi.dll", EntryPoint = "get_face_feature_by_face", CharSet = CharSet.Ansi + // , CallingConvention = CallingConvention.Cdecl)] + //public static extern int get_face_feature_by_face(IntPtr mat, ref TrackFaceInfo info, ref IntPtr feaptr); + // 浜鸿劯1:1姣斿(浼犲浘鐗囨枃浠惰矾寰�) + /// <summary> + /// 浜鸿劯瀵规瘮鎺ュ彛锛堜紶鍏ュ浘鐗囨枃浠惰矾寰勶級 + /// </summary> + /// <param name="file_name1">闇�瑕佸姣旂殑绗竴寮犲浘鐗囷紝灏忎簬10M锛屼紶鍏ュ浘鐗囨枃浠惰矾寰�</param> + /// <param name="file_name2">闇�瑕佸姣旂殑绗簩寮犲浘鐗囷紝灏忎簬10M锛屼紶鍏ュ浘鐗囨枃浠惰矾寰�</param> + /// <returns></returns> + [DllImport("BaiduFaceApi.dll", EntryPoint = "match", CharSet = CharSet.Ansi + , CallingConvention = CallingConvention.Cdecl)] + private static extern IntPtr match(string file_name1, string file_name2); + // 浜鸿劯1:1姣斿锛堜紶浜岃繘鍒跺浘鐗嘼uffer锛� + /// <summary> + /// 浜鸿劯瀵规瘮鎺ュ彛锛堜紶鍏ヤ簩杩涘埗鍥剧墖buffer锛� + /// </summary> + /// <param name="buf1">闇�瑕佸姣旂殑绗竴寮犲浘鐗囷紝灏忎簬10M</param> + /// <param name="size1">鍥剧墖1鐨勫ぇ灏�</param> + /// <param name="buf2">闇�瑕佸姣旂殑绗簩寮犲浘鐗囷紝灏忎簬10M</param> + /// <param name="size2">鍥剧墖2鐨勫ぇ灏�</param> + /// <returns></returns> + [DllImport("BaiduFaceApi.dll", EntryPoint = "match_by_buf", CharSet = CharSet.Ansi + , CallingConvention = CallingConvention.Cdecl)] + private static extern IntPtr match_by_buf(byte[] buf1, int size1, byte[] buf2, int size2); + // 浜鸿劯1:1姣斿锛堜紶opencv瑙嗛甯э級 + /// <summary> + /// 浜鸿劯1:1姣斿锛堜紶opencv瑙嗛甯э級 + /// </summary> + /// <param name="img1"></param> + /// <param name="img2"></param> + /// <returns></returns> + [DllImport("BaiduFaceApi.dll", EntryPoint = "match_by_mat", CharSet = CharSet.Ansi + , CallingConvention = CallingConvention.Cdecl)] + private static extern IntPtr match_by_mat(IntPtr img1, IntPtr img2);// byte[] buf1, int size1, byte[] buf2, int size2); + // 浜鸿劯1:1姣斿锛堜紶浜鸿劯鐗瑰緛鍊煎拰浜岃繘鍒跺浘鐗嘼uffer) + /// <summary> + /// 浜鸿劯瀵规瘮鎺ュ彛(浼犲叆浜岃繘鍒跺浘鐗嘼uffer) + /// </summary> + /// <param name="feature">鏂囦欢鐗瑰緛</param> + /// <param name="fea_len"></param> + /// <param name="buf2"></param> + /// <param name="size2"></param> + /// <returns></returns> + [DllImport("BaiduFaceApi.dll", EntryPoint = "match_by_feature", CharSet = CharSet.Ansi + , CallingConvention = CallingConvention.Cdecl)] + private static extern IntPtr match_by_feature(byte[] feature, int fea_len, byte[] buf2, int size2); + // 鐗瑰緛鍊兼瘮瀵癸紙浼�2涓汉鑴哥殑鐗瑰緛鍊硷級 + /// <summary> + /// 鐗瑰緛鍊兼瘮瀵� + /// </summary> + /// <param name="f1"></param> + /// <param name="f1_len"></param> + /// <param name="f2"></param> + /// <param name="f2_len"></param> + /// <returns></returns> + [DllImport("BaiduFaceApi.dll", EntryPoint = "compare_feature", CharSet = CharSet.Ansi + , CallingConvention = CallingConvention.Cdecl)] + private static extern float compare_feature(byte[] f1, int f1_len, byte[] f2, int f2_len); + // 1:N浜鸿劯璇嗗埆锛堜紶鍥剧墖鏂囦欢璺緞鍜屽簱閲岀殑姣斿锛� + /// <summary> + /// 浜鸿劯璇嗗埆锛屾彁渚�1锛歂鏌ユ壘 (浼犲叆鍥剧墖鏂囦欢璺緞) + /// </summary> + /// <param name="image">鍥剧墖淇℃伅锛屾暟鎹ぇ灏忓皬浜�10M锛屼紶鍏ュ浘鐗囨枃浠惰矾寰�</param> + /// <param name="group_id_list">缁刬d鍒楄〃銆傞粯璁よ嚦灏戝~鍐欎竴涓猤roup_id锛屼粠鎸囧畾鐨刧roup涓繘琛屾煡鎵俱�傞渶瑕佸悓鏃舵煡璇㈠涓猤roup锛岀敤閫楀彿鍒嗛殧锛屼笂闄�10涓�</param> + /// <param name="user_id">鐢ㄦ埛id锛岃嫢鎸囧畾浜嗘煇涓猽ser锛屽垯鍙細涓庢寚瀹歡roup涓嬬殑杩欎釜user杩涜瀵规瘮锛涜嫢user_id浼犵┖瀛楃涓测�� 鈥濓紝鍒欎細涓庢group涓嬬殑鎵�鏈塽ser杩涜1锛歂璇嗗埆</param> + /// <param name="user_top_num">璇嗗埆鍚庤繑鍥炵殑鐢ㄦ埛top鏁帮紝榛樿涓�1锛屾渶澶氳繑鍥�50涓粨鏋�</param> + /// <returns></returns> + [DllImport("BaiduFaceApi.dll", EntryPoint = "identify", CharSet = CharSet.Ansi + , CallingConvention = CallingConvention.Cdecl)] + private static extern IntPtr identify(string image, string group_id_list, string user_id, int user_top_num = 1); + // 1:N浜鸿劯璇嗗埆锛堜紶鍥剧墖浜岃繘鍒舵枃浠禸uffer鍜屽簱閲岀殑姣斿锛� + /// <summary> + /// 浜鸿劯璇嗗埆锛屾彁渚�1锛歂鏌ユ壘 (浼犲叆浜岃繘鍒跺浘鐗嘼uffer锛� + /// </summary> + /// <param name="buf">浜岃繘鍒跺浘鐗囦俊鎭紝鏁版嵁澶у皬灏忎簬10M</param> + /// <param name="size">鍥剧墖澶у皬</param> + /// <param name="group_id_list">缁刬d鍒楄〃銆傞粯璁よ嚦灏戝~鍐欎竴涓猤roup_id锛屼粠鎸囧畾鐨刧roup涓繘琛屾煡鎵俱�傞渶瑕佸悓鏃舵煡璇㈠涓猤roup锛岀敤閫楀彿鍒嗛殧锛屼笂闄�10涓�</param> + /// <param name="user_id">鐢ㄦ埛id锛岃嫢鎸囧畾浜嗘煇涓猽ser锛屽垯鍙細涓庢寚瀹歡roup涓嬬殑杩欎釜user杩涜瀵规瘮锛涜嫢user_id浼犵┖瀛楃涓测�� 鈥濓紝鍒欎細涓庢group涓嬬殑鎵�鏈塽ser杩涜1锛歂璇嗗埆</param> + /// <param name="user_top_num">璇嗗埆鍚庤繑鍥炵殑鐢ㄦ埛top鏁帮紝榛樿涓�1锛屾渶澶氳繑鍥�50涓粨鏋�</param> + /// <returns></returns> + [DllImport("BaiduFaceApi.dll", EntryPoint = "identify_by_buf", CharSet = CharSet.Ansi + , CallingConvention = CallingConvention.Cdecl)] + private static extern IntPtr identify_by_buf(byte[] buf, int size, string group_id_list, + string user_id, int user_top_num = 1); + // 1:N浜鸿劯璇嗗埆锛堜紶浜鸿劯鐗瑰緛鍊煎拰搴撻噷鐨勬瘮瀵癸級 + /// <summary> + /// 1:N浜鸿劯璇嗗埆锛堜紶浜鸿劯鐗瑰緛鍊煎拰搴撻噷鐨勬瘮瀵癸級 + /// </summary> + /// <param name="feature"></param> + /// <param name="fea_len"></param> + /// <param name="group_id_list">缁刬d鍒楄〃銆傞粯璁よ嚦灏戝~鍐欎竴涓猤roup_id锛屼粠鎸囧畾鐨刧roup涓繘琛屾煡鎵俱�傞渶瑕佸悓鏃舵煡璇㈠涓猤roup锛岀敤閫楀彿鍒嗛殧锛屼笂闄�10涓�</param> + /// <param name="user_id">鐢ㄦ埛id锛岃嫢鎸囧畾浜嗘煇涓猽ser锛屽垯鍙細涓庢寚瀹歡roup涓嬬殑杩欎釜user杩涜瀵规瘮锛涜嫢user_id浼犵┖瀛楃涓测�� 鈥濓紝鍒欎細涓庢group涓嬬殑鎵�鏈塽ser杩涜1锛歂璇嗗埆</param> + /// <param name="user_top_num">璇嗗埆鍚庤繑鍥炵殑鐢ㄦ埛top鏁帮紝榛樿涓�1锛屾渶澶氳繑鍥�50涓粨鏋�</param> + /// <returns></returns> + [DllImport("BaiduFaceApi.dll", EntryPoint = "identify_by_feature", CharSet = CharSet.Ansi + , CallingConvention = CallingConvention.Cdecl)] + private static extern IntPtr identify_by_feature(byte[] feature, int fea_len, string group_id_list, + string user_id, int user_top_num = 1); + + // 鎻愬墠鍔犺浇搴撻噷鎵�鏈夋暟鎹埌鍐呭瓨涓� + /// <summary> + /// 鎻愬墠鍔犺浇搴撻噷鎵�鏈夋暟鎹埌鍐呭瓨涓� + /// </summary> + /// <returns></returns> + [DllImport("BaiduFaceApi.dll", EntryPoint = "load_db_face", CharSet = CharSet.Ansi + , CallingConvention = CallingConvention.Cdecl)] + public static extern bool load_db_face(); + + // 1:N浜鸿劯璇嗗埆锛堜紶浜鸿劯鍥剧墖鏂囦欢鍜屽唴瀛樺凡鍔犺浇鐨勬暣涓簱鏁版嵁姣斿锛� + /// <summary> + /// 1:N浜鸿劯璇嗗埆锛堜紶浜鸿劯鍥剧墖鏂囦欢鍜屽唴瀛樺凡鍔犺浇鐨勬暣涓簱鏁版嵁姣斿锛� + /// </summary> + /// <param name="image"></param> + /// <param name="user_top_num"></param> + /// <returns></returns> + [DllImport("BaiduFaceApi.dll", EntryPoint = "identify_with_all", CharSet = CharSet.Ansi + , CallingConvention = CallingConvention.Cdecl)] + private static extern IntPtr identify_with_all(string image, int user_top_num = 1); + + // 1:N浜鸿劯璇嗗埆锛堜紶浜鸿劯鍥剧墖鏂囦欢鍜屽唴瀛樺凡鍔犺浇鐨勬暣涓簱鏁版嵁姣斿锛� + /// <summary> + /// + /// </summary> + /// <param name="image">鍥剧墖鐨勪簩杩涘埗鏂囦欢</param> + /// <param name="size"></param> + /// <param name="user_top_num"></param> + /// <returns></returns> + [DllImport("BaiduFaceApi.dll", EntryPoint = "identify_by_buf_with_all", CharSet = CharSet.Ansi + , CallingConvention = CallingConvention.Cdecl)] + private static extern IntPtr identify_by_buf_with_all(byte[] image, int size, int user_top_num = 1); + + // 1:N浜鸿劯璇嗗埆锛堜紶浜鸿劯鐗瑰緛鍊煎拰鍐呭瓨宸插姞杞界殑鏁翠釜搴撴暟鎹瘮瀵癸級 + /// <summary> + /// 1:N浜鸿劯璇嗗埆锛堜紶浜鸿劯鐗瑰緛鍊煎拰鍐呭瓨宸插姞杞界殑鏁翠釜搴撴暟鎹瘮瀵癸級 + /// </summary> + /// <param name="feature"></param> + /// <param name="fea_len"></param> + /// <param name="user_top_num"></param> + /// <returns></returns> + [DllImport("BaiduFaceApi.dll", EntryPoint = "identify_by_feature_with_all", CharSet = CharSet.Ansi + , CallingConvention = CallingConvention.Cdecl)] + private static extern IntPtr identify_by_feature_with_all(byte[] feature, int fea_len, int user_top_num = 1); + + + // 娴嬭瘯鑾峰彇浜鸿劯鐗瑰緛鍊�(2048涓猙yte锛� + public void test_get_face_feature() + { + byte[] fea = new byte[2048]; + string file_name = "G:\\Development\\Application\\testface\\img\\beckham\\2.jpg"; + int len = 0; + IntPtr ptr = get_face_feature(file_name, ref len); + if (ptr == IntPtr.Zero) + { + Console.WriteLine("get face feature error"); + } + else + { + if (len == 2048) + { + Console.WriteLine("get face feature success"); + Marshal.Copy(ptr, fea, 0, 2048); + // 鍙繚瀛樼壒寰佸��2048涓瓧鑺傜殑fea鍒版枃浠朵腑 + // FileUtil.byte2file("G:\\Development\\Application\\testface\\img\\beckham\\fea1.txt",fea, 2048); + } + else + { + Console.WriteLine("get face feature error"); + } + } + } + /// <summary> + /// 鑾峰彇浜鸿劯鐗瑰緛鍊�(2048涓猙yte锛� + /// </summary> + /// <param name="fileName"></param> + /// <returns></returns> + public string GetFaceFeature(string fileName) + { + try + { + byte[] fea = new byte[2048]; + string file_name = fileName == null ? fileName : "G:\\Development\\Application\\testface\\img\\beckham\\2.jpg"; + int len = 0; + IntPtr ptr = get_face_feature(file_name, ref len); + if (ptr == IntPtr.Zero) + { + Console.WriteLine("get face feature error"); + return "error"; + } + else + { + if (len == 2048) + { + Console.WriteLine("get face feature success"); + Marshal.Copy(ptr, fea, 0, 2048); + return fea.ToString(); + // 鍙繚瀛樼壒寰佸��2048涓瓧鑺傜殑fea鍒版枃浠朵腑 + // FileUtil.byte2file("G:\\Development\\Application\\testface\\img\\beckham\\fea1.txt",fea, 2048); + } + else + { + Console.WriteLine("get face feature error"); + return "error"; + } + } + } + catch (Exception e) + { + throw e; + } + } + /// <summary> + /// 鑾峰彇浜鸿劯鐗瑰緛鍊� 2048Byte + /// </summary> + /// <param name="file_name">鍥剧墖淇℃伅锛屾暟鎹ぇ灏忓皬浜�10M锛屼紶鍏ュ浘鐗囨枃浠惰矾寰�</param> + /// <param name="length">閫氳繃寮曠敤杩斿洖鐗瑰緛鍊肩殑闀垮害锛岃嫢涓�2048琛ㄧず鎻愬彇姝g‘锛屽叾浠栧�艰〃绀烘彁鍙栦簡閿欒鐨勭壒寰佸��</param> + /// <returns></returns> + public string GetFaceFeature(string file_name, ref int length) + { + byte[] fea = new byte[2048]; + int len = length == 0 ? 0 : length; //defalut=0 + string result = ""; + IntPtr ptr = get_face_feature(file_name, ref len); + if (ptr == IntPtr.Zero) + { + result = ("get face feature error"); + } + else + { + if (len == 2048) + { + result = ("get face feature success"); + Marshal.Copy(ptr, fea, 0, 2048); + // 鍙繚瀛樼壒寰佸��2048涓瓧鑺傜殑fea鍒版枃浠朵腑 + // FileUtil.byte2file("G:\\Development\\Application\\testface\\img\\beckham\\fea1.txt",fea, 2048); + } + else + { + result = ("get face feature error"); + } + } + return result; + } + + + //// 娴嬭瘯鑾峰彇浜鸿劯鐗瑰緛鍊�(2048涓猙yte锛� + //public void test_get_face_feature_by_buf() + //{ + // byte[] fea = new byte[2048]; + // System.Drawing.Image img = System.Drawing.Image.FromFile("G:\\Development\\Application\\testface\\img\\beckham\\2.jpg"); + // byte[] img_bytes = ImageUtil.img2byte(img); + // int len = 0; + // IntPtr ptr = get_face_feature_by_buf(img_bytes, img_bytes.Length, ref len); + // if (ptr == IntPtr.Zero) + // { + // Console.WriteLine("get face feature error"); + // } + // else + // { + // if (len == 2048) + // { + // Console.WriteLine("get face feature success"); + // Marshal.Copy(ptr, fea, 0, 2048); + // // 鍙繚瀛樼壒寰佸��2048涓瓧鑺傜殑fea鍒版枃浠朵腑 + // // FileUtil.byte2file("G:\\Development\\Application\\testface\\img\\beckham\\fea2.txt",fea, 2048); + // } + // else + // { + // Console.WriteLine("get face feature error"); + // } + // } + //} + + ///// <summary> + ///// 鑾峰彇浜鸿劯鐗瑰緛鍊� 2048byte + ///// </summary> + ///// <param name="filePath"></param> + ///// <returns></returns> + //public string GetFaceFeatureByBuffer(string filePath) + //{ + // byte[] fea = new byte[2048]; + // string result = ""; + // System.Drawing.Image img = System.Drawing.Image.FromFile(filePath); + // byte[] img_bytes = ImageUtil.img2byte(img); + // int len = 0; + // IntPtr ptr = get_face_feature_by_buf(img_bytes, img_bytes.Length, ref len); + // if (ptr == IntPtr.Zero) + // { + // result = ("get face feature error"); + // } + // else + // { + // if (len == 2048) + // { + // result = ("get face feature success"); + // Marshal.Copy(ptr, fea, 0, 2048); + // // 鍙繚瀛樼壒寰佸��2048涓瓧鑺傜殑fea鍒版枃浠朵腑 + // // FileUtil.byte2file("G:\\Development\\Application\\testface\\img\\beckham\\fea2.txt",fea, 2048); + // } + // else + // { + // result = ("get face feature error"); + // } + // } + // return result; + //} + + + // 娴嬭瘯1:1姣旇緝锛屼紶鍏ュ浘鐗囨枃浠惰矾寰� + public void test_match() + { + string file1 = "G:\\Development\\Application\\testface\\img\\beckham\\1.jpg"; + string file2 = "G:\\Development\\Application\\testface\\img\\beckham\\9.jpg"; + IntPtr ptr = match(file1, file2); + string buf = Marshal.PtrToStringAnsi(ptr); + Console.WriteLine("match res is:" + buf); + } + /// <summary> + /// 1:1姣旇緝 浼犲叆鍥剧墖鏂囦欢璺緞 + /// </summary> + /// <param name="file1"></param> + /// <param name="file2"></param> + /// <returns></returns> + public string FaceMatch(string file1, string file2) + { + IntPtr ptr = match(file1, file2); + string buf = Marshal.PtrToStringAnsi(ptr); + Console.WriteLine("match res is:" + buf); + return buf; + } + // 娴嬭瘯1:1姣旇緝锛屼紶鍏ュ浘鐗囨枃浠朵簩杩涘埗buffer + //public void test_match_by_buf() + //{ + // System.Drawing.Image img1 = System.Drawing.Image.FromFile("d:\\444.bmp"); + // byte[] img_bytes1 = ImageUtil.img2byte(img1); + + // System.Drawing.Image img2 = System.Drawing.Image.FromFile("d:\\555.png"); + // byte[] img_bytes2 = ImageUtil.img2byte(img2); + // Console.WriteLine("IntPtr ptr = match_by_buf"); + // IntPtr ptr = match_by_buf(img_bytes1, img_bytes1.Length, img_bytes2, img_bytes2.Length); + // string buf = Marshal.PtrToStringAnsi(ptr); + // Console.WriteLine("match_by_buf res is:" + buf); + //} + /// <summary> + /// 1:1姣旇緝 浼犲浘鐗囦簩杩涘埗Buffer + /// </summary> + /// <param name="file1"></param> + /// <param name="file2"></param> + /// <returns></returns> + public string FaceMatchByBuffer(byte[] file1, byte[] file2) + { + // System.Drawing.Image img1 = System.Drawing.Image.FromFile(file1); + byte[] img_bytes1 = file1; // ImageUtil.img2byte(img1); + + // System.Drawing.Image img2 = System.Drawing.Image.FromFile(file2); + byte[] img_bytes2 = file2; // ImageUtil.img2byte(img2); + Console.WriteLine("IntPtr ptr = match_by_buf"); + IntPtr ptr = match_by_buf(img_bytes1, img_bytes1.Length, img_bytes2, img_bytes2.Length); + string buf = Marshal.PtrToStringAnsi(ptr); + return ("match_by_buf res is:" + buf); + } + // 娴嬭瘯1:1姣旇緝锛屼紶鍏pencv瑙嗛甯� + public void test_match_by_mat() + { + Mat img1 = Cv2.ImRead("d:\\444.bmp"); + Mat img2 = Cv2.ImRead("d:\\555.png"); + IntPtr ptr = match_by_mat(img1.CvPtr, img2.CvPtr);// img_bytes1, img_bytes1.Length, img_bytes2, img_bytes2.Length); + string buf = Marshal.PtrToStringAnsi(ptr); + Console.WriteLine("match_by_buf res is:" + buf); + } + /// <summary> + /// 1:1姣旇緝锛屼紶鍏pencv瑙嗛甯� + /// </summary> + /// <param name="file1"></param> + /// <param name="file2"></param> + /// <returns></returns> + public string FaceMatchByMat(string file1, string file2) + { + Mat img1 = Cv2.ImRead(file1); + Mat img2 = Cv2.ImRead(file2); + IntPtr ptr = match_by_mat(img1.CvPtr, img2.CvPtr);// img_bytes1, img_bytes1.Length, img_bytes2, img_bytes2.Length); + string buf = Marshal.PtrToStringAnsi(ptr); + return ("match_by_buf res is:" + buf); + + } + // 娴嬭瘯鏍规嵁鐗瑰緛鍊煎拰鍥剧墖浜岃繘鍒禸uf姣旇緝 + //public void test_match_by_feature() + //{ + // // 鑾峰彇鐗瑰緛鍊�2048涓瓧鑺� + // byte[] fea = new byte[2048]; + // string file_name = "G:\\Development\\Application\\testface\\img\\beckham\\2.jpg"; + // int len = 0; + // IntPtr ptr = get_face_feature(file_name, ref len); + // if (len != 2048) + // { + // Console.WriteLine("get face feature error!"); + // return; + // } + // Marshal.Copy(ptr, fea, 0, 2048); + // // 鑾峰彇鍥剧墖浜岃繘鍒禸uffer + // System.Drawing.Image img2 = System.Drawing.Image.FromFile("G:\\Development\\Application\\testface\\img\\beckham\\8.jpg"); + // byte[] img_bytes2 = ImageUtil.img2byte(img2); + + // IntPtr ptr_res = match_by_feature(fea, fea.Length, img_bytes2, img_bytes2.Length); + // string buf = Marshal.PtrToStringAnsi(ptr_res); + // Console.WriteLine("match_by_feature res is:" + buf); + + //} + /// <summary> + /// 鏍规嵁鐗瑰緛鍊煎拰鍥剧墖浜岃繘鍒禸uf姣旇緝 + /// </summary> + /// <param name="file_name">闇�瑕佸姣旂殑鐗瑰緛鍊�</param> + /// <param name="file_buffer">闇�瑕佸姣旂殑绗簩寮犲浘鐗囷紝灏忎簬10M</param> + /// <returns></returns> + public string FaceMatchByFeature(byte[] file_name, byte[] file_buffer) + { + // 鑾峰彇鐗瑰緛鍊�2048涓瓧鑺� + byte[] fea = file_name; // new byte[2048]; + //int len = 0; + //IntPtr ptr = get_face_feature(file_name, ref len); + //if (len != 2048) + //{ + // return ("get face feature error!"); + //} + //Marshal.Copy(ptr, fea, 0, 2048); + //// 鑾峰彇鍥剧墖浜岃繘鍒禸uffer + //System.Drawing.Image img2 = System.Drawing.Image.FromFile(file_buffer); + byte[] img_bytes2 = file_buffer; // ImageUtil.img2byte(img2); + + IntPtr ptr_res = match_by_feature(fea, fea.Length, img_bytes2, img_bytes2.Length); + string buf = Marshal.PtrToStringAnsi(ptr_res); + Console.WriteLine("match_by_feature res is:" + buf); + return buf; + + } + + // 娴嬭瘯1:N姣旇緝锛屼紶鍏ュ浘鐗囨枃浠惰矾寰� + public /*void*/string test_identify(string str, string usr_grp, string usr_id) + { + string file1 = str;//"G:\\Development\\Application\\testface\\img\\beckham\\6.jpg"; + string user_group = usr_grp;//"test_group"; + string user_id = usr_id;//"test_user"; + IntPtr ptr = identify(file1, user_group, user_id); + string buf = Marshal.PtrToStringAnsi(ptr); + Console.WriteLine("identify res is:" + buf); + return buf; + } + /// <summary> + /// 1:N姣旇緝锛屼紶鍏ュ浘鐗囨枃浠惰矾寰� + /// </summary> + /// <param name="file">鍥剧墖淇℃伅锛屾暟鎹ぇ灏忓皬浜�10M锛屼紶鍏ュ浘鐗囨枃浠惰矾寰�</param> + /// <param name="user_group">缁刬d鍒楄〃銆傞粯璁よ嚦灏戝~鍐欎竴涓猤roup_id锛屼粠鎸囧畾鐨刧roup涓繘琛屾煡鎵俱�傞渶瑕佸悓鏃舵煡璇㈠涓猤roup锛岀敤閫楀彿鍒嗛殧锛屼笂闄�10涓�</param> + /// <param name="user_id">鐢ㄦ埛id锛岃嫢鎸囧畾浜嗘煇涓猽ser锛屽垯鍙細涓庢寚瀹歡roup涓嬬殑杩欎釜user杩涜瀵规瘮锛涜嫢user_id浼犵┖瀛楃涓测�� 鈥濓紝鍒欎細涓庢group涓嬬殑鎵�鏈塽ser杩涜1锛歂璇嗗埆</param> + /// <returns></returns> + public static string FaceIdentify(string file, string user_group, string user_id) + { + string file1 = file; + IntPtr ptr = identify(file1, user_group, user_id); + string buf = Marshal.PtrToStringAnsi(ptr); + Console.WriteLine("identify res is:" + buf); + return buf; + } + + // 娴嬭瘯1:N姣旇緝锛屼紶鍏ュ浘鐗囨枃浠朵簩杩涘埗buffer + //public void test_identify_by_buf(string str, string usr_grp, string usr_id) + //{ + // System.Drawing.Image img = System.Drawing.Image.FromFile(str);//"G:\\Development\\Application\\testface\\img\\beckham\\2.jpg"); + // byte[] img_bytes = ImageUtil.img2byte(img); + + // string user_group = usr_grp;//"test_group"; + // string user_id = usr_id;// "test_user"; + // IntPtr ptr = identify_by_buf(img_bytes, img_bytes.Length, user_group, user_id); + // string buf = Marshal.PtrToStringAnsi(ptr); + // Console.WriteLine("identify_by_buf res is:" + buf); + //} + /// <summary> + /// 1:N姣旇緝锛屼紶鍏ュ浘鐗囨枃浠朵簩杩涘埗buffer + /// </summary> + /// <param name="str">浜岃繘鍒跺浘鐗囦俊鎭紝鏁版嵁澶у皬灏忎簬10M</param> + /// <param name="usr_grp">缁刬d鍒楄〃銆傞粯璁よ嚦灏戝~鍐欎竴涓猤roup_id锛屼粠鎸囧畾鐨刧roup涓繘琛屾煡鎵俱�傞渶瑕佸悓鏃舵煡璇㈠涓猤roup锛岀敤閫楀彿鍒嗛殧锛屼笂闄�10涓�</param> + /// <param name="usr_id">鐢ㄦ埛id锛岃嫢鎸囧畾浜嗘煇涓猽ser锛屽垯鍙細涓庢寚瀹歡roup涓嬬殑杩欎釜user杩涜瀵规瘮锛涜嫢user_id浼犵┖瀛楃涓测�� 鈥濓紝鍒欎細涓庢group涓嬬殑鎵�鏈塽ser杩涜1锛歂璇嗗埆</param> + /// <returns></returns> + public string FaceIdentifyByBuffer(byte[] str, string usr_grp, string usr_id) + { + // System.Drawing.Image img = System.Drawing.Image.FromFile(str); + byte[] img_bytes = str; // ImageUtil.img2byte(img); + + string user_group = usr_grp;//"test_group"; + string user_id = usr_id;// "test_user"; + IntPtr ptr = identify_by_buf(img_bytes, img_bytes.Length, user_group, user_id); + string buf = Marshal.PtrToStringAnsi(ptr); + Console.WriteLine("identify_by_buf res is:" + buf); + return buf; + } + + // 娴嬭瘯1:N姣旇緝锛屼紶鍏ユ彁鍙栫殑浜鸿劯鐗瑰緛鍊� + public void test_identify_by_feature() + { + // 鑾峰彇鐗瑰緛鍊�2048涓瓧鑺� + byte[] fea = new byte[2048]; + string file_name = "G:\\Development\\Application\\testface\\img\\beckham\\2.jpg"; + int len = 0; + IntPtr ptr = get_face_feature(file_name, ref len); + if (len != 2048) + { + Console.WriteLine("get face feature error!"); + return; + } + Marshal.Copy(ptr, fea, 0, 2048); + + string user_group = "test_group"; + string user_id = "test_user"; + IntPtr ptr_res = identify_by_feature(fea, fea.Length, user_group, user_id); + string buf = Marshal.PtrToStringAnsi(ptr_res); + Console.WriteLine("identify_by_feature res is:" + buf); + } + /// <summary> + /// 1:N姣旇緝锛屼紶鍏ユ彁鍙栫殑浜鸿劯鐗瑰緛鍊� + /// </summary> + /// <param name="file_name">浼犲叆鍥剧墖鐗瑰緛</param> + /// <param name="userGroup">缁刬d鍒楄〃銆傞粯璁よ嚦灏戝~鍐欎竴涓猤roup_id锛屼粠鎸囧畾鐨刧roup涓繘琛屾煡鎵俱�傞渶瑕佸悓鏃舵煡璇㈠涓猤roup锛岀敤閫楀彿鍒嗛殧锛屼笂闄�10涓�</param> + /// <param name="userId">鐢ㄦ埛id锛岃嫢鎸囧畾浜嗘煇涓猽ser锛屽垯鍙細涓庢寚瀹歡roup涓嬬殑杩欎釜user杩涜瀵规瘮锛涜嫢user_id浼犵┖瀛楃涓测�� 鈥濓紝鍒欎細涓庢group涓嬬殑鎵�鏈塽ser杩涜1锛歂璇嗗埆</param> + /// + public static string FaceIdentifyByFeature(string file_name, string userGroup, string userId) + { + // 鑾峰彇鐗瑰緛鍊�2048涓瓧鑺� + byte[] fea = new byte[2048]; + int len = 0; + IntPtr ptr = get_face_feature(file_name, ref len); + if (len != 2048) + { + return ("get face feature error!"); + } + Marshal.Copy(ptr, fea, 0, 2048); + + string user_group = userGroup == null ? "test_group" : userGroup; + string user_id = userId == null ? "test_user" : userId; + IntPtr ptr_res = identify_by_feature(fea, fea.Length, user_group, user_id); + string buf = Marshal.PtrToStringAnsi(ptr_res); + Console.WriteLine("identify_by_feature res is:" + buf); + return buf; + } + + // 閫氳繃鐗瑰緛鍊兼瘮瀵癸紙1:1锛� + public void test_compare_feature() + { + // 鑾峰彇鐗瑰緛鍊�1 鍏�2048涓瓧鑺� + byte[] fea1 = new byte[2048]; + string file_name1 = "G:\\Development\\Application\\testface\\img\\beckham\\2.jpg"; + int len1 = 0; + IntPtr ptr1 = get_face_feature(file_name1, ref len1); + if (len1 != 2048) + { + Console.WriteLine("get face feature error!"); + return; + } + Marshal.Copy(ptr1, fea1, 0, 2048); + + // 鑾峰彇鐗瑰緛鍊�2 鍏�2048涓瓧鑺� + byte[] fea2 = new byte[2048]; + string file_name2 = "G:\\Development\\Application\\testface\\img\\beckham\\8.jpg"; + int len2 = 0; + IntPtr ptr2 = get_face_feature(file_name2, ref len2); + if (len2 != 2048) + { + Console.WriteLine("get face feature error!"); + return; + } + Marshal.Copy(ptr2, fea2, 0, 2048); + // 姣斿 + float score = compare_feature(fea1, len1, fea2, len2); + Console.WriteLine("compare_feature score is:" + score); + } + /// <summary> + /// 閫氳繃鐗瑰緛鍊兼瘮瀵癸紙1:1锛� 瀵逛汉鑴哥壒寰佸�艰繘琛屾瘮杈冿紝鍙繑鍥炰汉鑴哥壒寰佺浉浼煎垎鍊硷紙鐧惧垎鍒讹級 + /// </summary> + /// <param name="file_name1">2048涓猙yte鏁扮粍鐨勭壒寰佸��(浼犲浘鐗囪矾寰�)</param> + /// <param name="file_name2">2048涓猙yte鏁扮粍鐨勭壒寰佸�硷紙浼犲浘鐗囪矾寰勶級</param> + /// <returns></returns> + public static string FaceCompareFeature(string file_name1, string file_name2) + { + string mes = "鍏ワ細"; + try + { + + // 鑾峰彇鐗瑰緛鍊�1 鍏�2048涓瓧鑺� + byte[] fea1 = new byte[2048]; + int len1 = 0; + IntPtr ptr1 = get_face_feature(file_name1, ref len1); + if (len1 != 2048) + { + return mes += "get face feature error!"; + } + Marshal.Copy(ptr1, fea1, 0, 2048); + + // 鑾峰彇鐗瑰緛鍊�2 鍏�2048涓瓧鑺� + byte[] fea2 = new byte[2048]; + int len2 = 0; + IntPtr ptr2 = get_face_feature(file_name2, ref len2); + if (len2 != 2048) + { + return mes += "get face feature error!"; + } + Marshal.Copy(ptr2, fea2, 0, 2048); + // 姣斿 + // len1 鐗瑰緛鍊�1鐨勯暱搴� + float score = compare_feature(fea1, len1, fea2, len2); + Console.WriteLine("compare_feature score is:" + score); + return mes += score.ToString(); + + } + catch (Exception ex) + { + return mes += ex; + } + } + /// <summary> + /// 閫氳繃鐗瑰緛鍊兼瘮瀵癸紙1:1锛� 瀵逛汉鑴哥壒寰佸�艰繘琛屾瘮杈冿紝鍙繑鍥炰汉鑴哥壒寰佺浉浼煎垎鍊硷紙鐧惧垎鍒讹級 + /// </summary> + /// <param name="face1">2048涓猙yte鏁扮粍鐨勭壒寰佸��</param> + /// <param name="face2">2048涓猙yte鏁扮粍鐨勭壒寰佸��</param> + /// <returns></returns> + public string FaceCompareFeatureByBuffer(byte[] face1, byte[] face2) + { + if (face1.Length == 2048 && face2.Length == 2048) + { + // 鑾峰彇鐗瑰緛鍊�1 鍏�2048涓瓧鑺� + byte[] fea1 = new byte[2048]; + fea1 = face1; + int len1 = 0; + // 鑾峰彇鐗瑰緛鍊�1 鍏�2048涓瓧鑺� + byte[] fea2 = new byte[2048]; + fea2 = face2; + int len2 = 0; + // 姣斿 + // len1 鐗瑰緛鍊�1鐨勯暱搴� + float score = compare_feature(fea1, len1, fea2, len2); + Console.WriteLine("compare_feature score is:" + score); + return score.ToString(); + } + else + { + return "byte should be 2048"; + } + } + + // 娴嬭瘯1:N姣旇緝锛屼紶鍏ユ彁鍙栫殑浜鸿劯鐗瑰緛鍊煎拰宸插姞杞界殑鍐呭瓨涓暣涓簱姣旇緝 + public void test_identify_by_feature_with_all() + { + // 鍔犺浇鏁翠釜鏁版嵁搴撳埌鍐呭瓨涓� + load_db_face(); + // 鑾峰彇鐗瑰緛鍊�2048涓瓧鑺� + byte[] fea = new byte[2048]; + string file_name = "G:\\Development\\Application\\testface\\img\\beckham\\2.jpg"; + int len = 0; + IntPtr ptr = get_face_feature(file_name, ref len); + if (len != 2048) + { + Console.WriteLine("get face feature error!"); + return; + } + Marshal.Copy(ptr, fea, 0, 2048); + IntPtr ptr_res = identify_by_feature_with_all(fea, fea.Length); + string buf = Marshal.PtrToStringAnsi(ptr_res); + Console.WriteLine("identify_by_feature_with_all res is:" + buf); + } + /// <summary> + /// 1:N姣旇緝锛屼紶鍏ユ彁鍙栫殑浜鸿劯鐗瑰緛鍊煎拰宸插姞杞界殑鍐呭瓨涓暣涓簱姣旇緝 + /// </summary> + /// <param name="file_name">浼犲叆浜鸿劯鏂囦欢鐗瑰緛鍊�</param> + /// <returns></returns> + public string FaceIdentifyByFeatureWithAll(byte[] file_name) + { + // 鍔犺浇鏁翠釜鏁版嵁搴撳埌鍐呭瓨涓� + load_db_face(); + // 鑾峰彇鐗瑰緛鍊�2048涓瓧鑺� + byte[] fea = new byte[2048]; + fea = file_name; + int len = 0; + //IntPtr ptr = get_face_feature(file_name, ref len); + //if (len != 2048) + //{ + // Console.WriteLine("get face feature error!"); + // return "error"; + //} + // Marshal.Copy(ptr, fea, 0, 2048); + IntPtr ptr_res = identify_by_feature_with_all(fea, fea.Length); + string buf = Marshal.PtrToStringAnsi(ptr_res); + Console.WriteLine("identify_by_feature_with_all res is:" + buf); + return buf; + } + + // 娴嬭瘯1:N姣旇緝锛屼紶鍏ュ浘鐗囨枃浠惰矾寰勫拰宸插姞杞界殑鍐呭瓨涓暣涓簱姣旇緝 + public void test_identify_with_all() + { + // 鍔犺浇鏁翠釜鏁版嵁搴撳埌鍐呭瓨涓� + load_db_face(); + // 1:N + string file1 = "G:\\Development\\Application\\testface\\img\\beckham\\3.jpg"; + IntPtr ptr = identify_with_all(file1); + string buf = Marshal.PtrToStringAnsi(ptr); + Console.WriteLine("identify_with_all res is:" + buf); + } + /// <summary> + /// 1:N姣旇緝锛屼紶鍏ュ浘鐗囨枃浠惰矾寰勫拰宸插姞杞界殑鍐呭瓨涓暣涓簱姣旇緝 + /// </summary> + /// <param name="file1">浼犲叆鍥剧墖璺緞</param> + /// <returns></returns> + public string FaceIndentifyWithAll(string file1) + { + // 鍔犺浇鏁翠釜鏁版嵁搴撳埌鍐呭瓨涓� + load_db_face(); + // 1:N + IntPtr ptr = identify_with_all(file1); + string buf = Marshal.PtrToStringAnsi(ptr); + Console.WriteLine("identify_with_all res is:" + buf); + return buf; + } + + + /// <summary> + /// 1:N姣旇緝锛屼紶鍏ュ浘鐗囨枃浠朵簩杩涘埗buffer鍜屽凡鍔犺浇鐨勫唴瀛樹腑鏁翠釜搴撴瘮杈� + /// </summary> + /// <param name="file_name"></param> + /// <returns></returns> + public string FaceIdentifyByBufferWithAll(byte[] file_name) + { + // 鍔犺浇鏁翠釜鏁版嵁搴撳埌鍐呭瓨涓� + load_db_face(); + // 1:N + // System.Drawing.Image img = System.Drawing.Image.FromFile(file_name); + byte[] img_bytes = file_name;// ImageUtil.img2byte(img); + + IntPtr ptr = identify_by_buf_with_all(img_bytes, img_bytes.Length); + string buf = Marshal.PtrToStringAnsi(ptr); + Console.WriteLine("identify_by_buf_with_all res is:" + buf); + return buf; + } + + } +} diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/FaceAI/FaceDraw.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/FaceAI/FaceDraw.cs" new file mode 100644 index 0000000..24033ed --- /dev/null +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/FaceAI/FaceDraw.cs" @@ -0,0 +1,151 @@ +锘縰sing System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using OpenCvSharp; +// 缁樺埗绫伙紝鐢讳汉鑴告锛岀敾鍏抽敭鐐圭瓑 +namespace FaceAI +{ + class FaceDraw + { + // 鐢讳汉鑴告 + public static int draw_rects(ref Mat img, int face_num, BDFaceBBox[] info) + { + if (face_num <= 0) + { + return 0; + } + Scalar color = new Scalar(0, 255, 0); + for (int i = 0; i < face_num; i++) + { + int x = Convert.ToInt32(info[i].center_x - info[i].width / 2.0); + int y = Convert.ToInt32(info[i].center_y - info[i].height / 2.0); + int w = Convert.ToInt32(info[i].width); + int h = Convert.ToInt32(info[i].height); + Rect rect = new Rect(x, y, w, h); + Cv2.Rectangle(img, rect, color); + } + return 0; + } + // 鐢讳汉鑴告 + public static int draw_rects(ref Mat img, int face_num, BDFaceTrackInfo[] track_info) + { + if (face_num <= 0) + { + return 0; + } + Scalar color = new Scalar(0, 255, 0); + for(int i = 0; i < face_num; i++) + { + int x = Convert.ToInt32(track_info[i].box.center_x- track_info[i].box.width / 2.0); + int y = Convert.ToInt32(track_info[i].box.center_y - track_info[i].box.height / 2.0); + int w = Convert.ToInt32(track_info[i].box.width); + int h = Convert.ToInt32(track_info[i].box.height); + Rect rect = new Rect(x,y,w,h); + Cv2.Rectangle(img, rect, color); + } + return 0; + } + // 鐢讳汉鑴稿叧閿偣 + public static int draw_shape(ref Mat img, int face_num, BDFaceTrackInfo[] track_info) + { + if (face_num <= 0) + { + return 0; + } + int face_id = 0; + Scalar color = new Scalar(0, 255, 255); + Scalar color2 = new Scalar(0, 0, 255); + for (int i = 0; i < face_num; ++i) + { + int point_size = track_info[i].landmark.size / 2; + int radius = 2; + face_id = track_info[i].face_id; + for (int j = 0; j < point_size; ++j) + { + Cv2.Circle(img, (int)track_info[i].landmark.data[j * 2], (int)track_info[i].landmark.data[j * 2 + 1], radius, color); + } + if (point_size == 72) + { + const int components = 9; + int[] comp1 = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 }; + int[] comp2 = { 13, 14, 15, 16, 17, 18, 19, 20, 13, 21 }; + int[] comp3 = { 22, 23, 24, 25, 26, 27, 28, 29, 22 }; + int[] comp4 = { 30, 31, 32, 33, 34, 35, 36, 37, 30, 38 }; + int[] comp5 = { 39, 40, 41, 42, 43, 44, 45, 46, 39 }; + int[] comp6 = { 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 47 }; + int[] comp7 = { 51, 57, 52 }; + int[] comp8 = { 58, 59, 60, 61, 62, 63, 64, 65, 58 }; + int[] comp9 = { 58, 66, 67, 68, 62, 69, 70, 71, 58 }; + int[][] idx = { comp1, comp2, comp3, comp4, comp5, comp6, comp7, comp8, comp9 }; + int[] npoints = { 13, 10, 9, 10, 9, 11, 3, 9, 9 }; + + for (int m = 0; m < components; ++m) + { + for (int n = 0; n < npoints[m] - 1; ++n) + { + Point p1 = new Point(track_info[i].landmark.data[idx[m][n] * 2], track_info[i].landmark.data[idx[m][n] * 2 + 1]); + Point p2 = new Point(track_info[i].landmark.data[idx[m][n + 1] * 2], track_info[i].landmark.data[idx[m][n + 1] * 2 + 1]); + Cv2.Line(img, p1, p2, color2); + } + } + } + string s_face_id = face_id.ToString(); + double font_scale = 2; + Point pos = new Point(track_info[i].box.center_x, track_info[i].box.center_y); + Cv2.PutText(img, s_face_id, pos, HersheyFonts.HersheyComplex, font_scale, new Scalar(0, 255, 255)); + } + + return 0; + } + + // 鐢讳汉鑴稿叧閿偣 + public static int draw_landmark(ref Mat img, int face_num, BDFaceLandmark[] landmark) + { + if (face_num <= 0) + { + return 0; + } + Scalar color = new Scalar(0, 255, 255); + Scalar color2 = new Scalar(0, 0, 255); + for (int i = 0; i < face_num; ++i) + { + int point_size = landmark[i].size / 2; + int radius = 2; + for (int j = 0; j < point_size; ++j) + { + Cv2.Circle(img, (int)landmark[i].data[j * 2], (int)landmark[i].data[j * 2 + 1], radius, color); + } + if (point_size == 72) + { + const int components = 9; + int[] comp1 = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 }; + int[] comp2 = { 13, 14, 15, 16, 17, 18, 19, 20, 13, 21 }; + int[] comp3 = { 22, 23, 24, 25, 26, 27, 28, 29, 22 }; + int[] comp4 = { 30, 31, 32, 33, 34, 35, 36, 37, 30, 38 }; + int[] comp5 = { 39, 40, 41, 42, 43, 44, 45, 46, 39 }; + int[] comp6 = { 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 47 }; + int[] comp7 = { 51, 57, 52 }; + int[] comp8 = { 58, 59, 60, 61, 62, 63, 64, 65, 58 }; + int[] comp9 = { 58, 66, 67, 68, 62, 69, 70, 71, 58 }; + int[][] idx = { comp1, comp2, comp3, comp4, comp5, comp6, comp7, comp8, comp9 }; + int[] npoints = { 13, 10, 9, 10, 9, 11, 3, 9, 9 }; + + for (int m = 0; m < components; ++m) + { + for (int n = 0; n < npoints[m] - 1; ++n) + { + Point p1 = new Point(landmark[i].data[idx[m][n] * 2], landmark[i].data[idx[m][n] * 2 + 1]); + Point p2 = new Point(landmark[i].data[idx[m][n + 1] * 2], landmark[i].data[idx[m][n + 1] * 2 + 1]); + Cv2.Line(img, p1, p2, color2); + } + } + } + + + } + return 0; + } + } +} diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/FaceAI/FaceFeature.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/FaceAI/FaceFeature.cs" new file mode 100644 index 0000000..7f38d29 --- /dev/null +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/FaceAI/FaceFeature.cs" @@ -0,0 +1,133 @@ +锘縰sing System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Runtime.InteropServices; +using System.IO; +using OpenCvSharp; + +// 鎻愬彇浜鸿劯鐗瑰緛鍊� +namespace FaceAI +{ + // 浜鸿劯鐗瑰緛鍊肩粨鏋勪綋 + [StructLayout(LayoutKind.Sequential, Pack = 1)] + public struct BDFaceFeature + { + public int size; + // 浜鸿劯鐨勭壒寰佸�硷紝鎻愬彇鍑烘潵鍚庢槸128涓猣loat鐨勬诞鐐瑰�� + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 128)] + public float[] data;// = new float[128]; + } + // 浜鸿劯鐗瑰緛鍊肩粨鏋勪綋 + [StructLayout(LayoutKind.Sequential, Pack = 1)] + public struct BDDepthFeature + { + public int size; + // 浜鸿劯鐨勬繁搴︾壒寰佸�硷紝鎻愬彇鍑烘潵鍚庢槸256涓猣loat鐨勬诞鐐瑰�� + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 256)] + public float[] data;// = new float[256]; + } + class FaceFeature + { + // 鎻愬彇浜鸿劯鐗瑰緛鍊� + [DllImport("BaiduFaceApi.dll", EntryPoint = "face_feature", CharSet = CharSet.Ansi + , CallingConvention = CallingConvention.Cdecl)] + // 杩斿洖num涓虹壒寰佸�肩殑浜烘暟,type涓�0琛ㄧず鎻愬彇鐢熸椿鐓х殑鐗瑰緛鍊硷紝1琛ㄧずnir鐨勭壒寰佸�� + public static extern int face_feature(IntPtr feature, IntPtr box, IntPtr mat, int type); + + + + public void test_face_feature() + { + long t_begin = TimeUtil.get_time_stamp(); + BDFaceFeature[] fea1 = test_get_face_feature_by_path("../images/2.jpg"); + long t_end = TimeUtil.get_time_stamp(); + Console.WriteLine("get feature time cost is:" + (t_end - t_begin)); + } + + // 鑾峰彇鐗瑰緛鍊硷紝浼犲叆鍥剧墖璺緞 + public BDFaceFeature[] test_get_face_feature_by_path(string img_path) + { + // 鐗瑰緛鍊肩殑闀垮害锛�128涓猣loat鍊� + int dim_count = 128; + Mat mat = Cv2.ImRead(img_path); + // 鍋囪鎻愬彇鐨勪汉鏁帮紝闇�瑕佹瘮瀹為檯鐨勪汉鏁板锛屽洜涓洪渶瑕佹彁鍙栧垎閰嶅唴瀛� + int faceNum = 5; + BDFaceFeature[] feaList = new BDFaceFeature[faceNum]; + for(int i = 0; i < faceNum; i++) + { + feaList[i].data = new float[dim_count]; + feaList[i].size = 0; + } + + if (mat.Empty()) + { + return null; + } + + int sizeFeature = Marshal.SizeOf(typeof(BDFaceFeature)); + IntPtr ptFea = Marshal.AllocHGlobal(sizeFeature * faceNum); + + // 鏋勯�犺繑鍥炵殑浜鸿劯妗嗘暟鎹� + BDFaceBBox[] info = new BDFaceBBox[faceNum]; + int sizeBox = Marshal.SizeOf(typeof(BDFaceBBox)); + IntPtr ptBox = Marshal.AllocHGlobal(sizeBox * faceNum); + // 杩斿洖num涓虹壒寰佸�肩殑浜烘暟,type涓�0琛ㄧず鎻愬彇鐢熸椿鐓х殑鐗瑰緛鍊硷紝1琛ㄧず璇佷欢鐓х殑鐗瑰緛鍊硷紝2琛ㄧずnir鐨勭壒寰佸�� + int type = 0; + int num = face_feature(ptFea, ptBox, mat.CvPtr, type); + if (num <= 0) + { + return null; + } + Console.WriteLine("face num is:{0}", num); + // 璇风‘淇漟aceNum澶т簬num, faceNum涓篶#鏈熸湜鐨勬娴嬩汉鏁帮紝闇�瑕侀鍏堝垎閰嶅唴瀛橈紝鍚﹀垯鏃犳硶鑾峰彇 + if (num > faceNum) + { + num = faceNum; + } + for (int index = 0; index < num; index++) + { + IntPtr ptrF = new IntPtr(); + IntPtr ptrB = new IntPtr(); + if (8 == IntPtr.Size) + { + ptrF = (IntPtr)(ptFea.ToInt64() + sizeFeature * index); + ptrB = (IntPtr)(ptBox.ToInt64() + sizeBox * index); + } + else if (4 == IntPtr.Size) + { + ptrF = (IntPtr)(ptFea.ToInt32() + sizeFeature * index); + ptrB = (IntPtr)(ptBox.ToInt32() + sizeBox * index); + } + feaList[index] = (BDFaceFeature)Marshal.PtrToStructure(ptrF, typeof(BDFaceFeature)); + Console.WriteLine("feaList[index].size is:{0}", feaList[index].size); + + + for (int k = 0; k < feaList[index].size; k++) + { + Console.WriteLine("feature is {0}:", feaList[index].data[k]); + } + + info[index] = (BDFaceBBox)Marshal.PtrToStructure(ptrB, typeof(BDFaceBBox)); + + // 绱㈠紩鍊� + Console.WriteLine("detect score is:{0}", info[index].index); + // 缃俊搴� + Console.WriteLine("detect score is:{0}", info[index].score); + // 浜鸿劯瀹藉害 + Console.WriteLine("detect mWidth is:{0}", info[index].width); + // 涓績鐐筙,Y鍧愭爣 + Console.WriteLine("detect mCenter_x is:{0}", info[index].center_x); + Console.WriteLine("detect mCenter_y is:{0}", info[index].center_y); + } + // 缁樺埗浜鸿劯妗� + FaceDraw.draw_rects(ref mat, faceNum, info); + + //mat.ImWrite("detect.jpg"); + mat.Release(); + return feaList; + } + + } +} diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/FaceAI/FaceLiveness.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/FaceAI/FaceLiveness.cs" new file mode 100644 index 0000000..0e83584 --- /dev/null +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/FaceAI/FaceLiveness.cs" @@ -0,0 +1,548 @@ +锘縰sing System; +using System.IO; +using System.Threading; +using System.Collections; +using System.Runtime.InteropServices; +using System.Collections.Generic; +using OpenCvSharp; + +namespace FaceAI +{ + [StructLayout(LayoutKind.Sequential, Pack = 1)] + // 娲讳綋鍒嗗�� + struct BDLivenessScore + { + public float score; //鍒嗗�� + }; + // 娲讳綋妫�娴� + class FaceLiveness + { + // 鍗曠洰RGB闈欓粯娲讳綋妫�娴� + [DllImport("BaiduFaceApi.dll", EntryPoint = "rgb_liveness", CharSet = CharSet.Ansi + , CallingConvention = CallingConvention.Cdecl)] + public static extern int rgb_liveness(IntPtr ptr_boxinfo, IntPtr ptr_score, IntPtr mat); + + // 鍗曠洰杩戠孩澶栭潤榛樻椿浣撴娴� + [DllImport("BaiduFaceApi.dll", EntryPoint = "nir_liveness", CharSet = CharSet.Ansi + , CallingConvention = CallingConvention.Cdecl)] + public static extern int nir_liveness(IntPtr ptr_boxinfo, IntPtr ptr_score, IntPtr mat); + + // 鍙岀洰娣卞害闈欓粯娲讳綋妫�娴� + [DllImport("BaiduFaceApi.dll", EntryPoint = "rgb_depth_liveness", CharSet = CharSet.Ansi + , CallingConvention = CallingConvention.Cdecl)] + public static extern int rgb_depth_liveness(IntPtr ptr_boxinfo, IntPtr ptr_rgbscore, IntPtr ptr_depthcore, IntPtr rgb_mat, IntPtr depth_mat); + + + public void test_liveness_by_image() + { + // rgb 娲讳綋妫�娴� + string img_rgb = "../images/rgb.png"; + liveness_check(img_rgb, 0); + // nir 娲讳綋妫�娴� + string img_nir = "../images/nir.png"; + // liveness_check(img_nir, 1); + + } + + // 娴嬭瘯鍗曠洰RGB闈欓粯娲讳綋妫�娴嬶紙浼犲叆鍥剧墖鏂囦欢璺緞锛屾椿浣撶被鍨�) + public void liveness_check(string img_path, int live_type) + { + Mat mat = Cv2.ImRead(img_path); + int max_face_num = 1; // 娲讳綋浠呰繑鍥炰竴涓汉鑴革紝澶氫汉鍙栨渶澶т汉鑴� + + BDFaceBBox[] box_info = new BDFaceBBox[max_face_num]; + + int sizeBox = Marshal.SizeOf(typeof(BDFaceBBox)); + IntPtr ptT = Marshal.AllocHGlobal(sizeBox * max_face_num); + + + BDLivenessScore[] score_info = new BDLivenessScore[max_face_num]; + int sizeScore = Marshal.SizeOf(typeof(BDLivenessScore)); + IntPtr ptS = Marshal.AllocHGlobal(sizeScore * max_face_num); + // faceNum涓鸿繑鍥炵殑妫�娴嬪埌鐨勪汉鑴镐釜鏁� + int faceNum = 0; + if (live_type == 0) + { + faceNum = rgb_liveness(ptT, ptS, mat.CvPtr); + } + else if (live_type == 1) + { + faceNum = nir_liveness(ptT, ptS, mat.CvPtr); + } + mat.Release(); + + + Console.WriteLine("faceSize is:" + faceNum); + for (int index = 0; index < faceNum; index++) + { + + IntPtr ptr = new IntPtr(); + IntPtr ptrScore = new IntPtr(); + if (8 == IntPtr.Size) + { + ptr = (IntPtr)(ptT.ToInt64() + sizeBox * index); + ptrScore = (IntPtr)(ptS.ToInt64() + sizeScore * index); + } + else if (4 == IntPtr.Size) + { + ptr = (IntPtr)(ptT.ToInt32() + sizeBox * index); + ptrScore = (IntPtr)(ptS.ToInt32() + sizeScore * index); + } + + box_info[index] = (BDFaceBBox)Marshal.PtrToStructure(ptr, typeof(BDFaceBBox)); + + score_info[index] = (BDLivenessScore)Marshal.PtrToStructure(ptrScore, typeof(BDLivenessScore)); + + // 绱㈠紩鍊� + Console.WriteLine("track index is:{0}", box_info[index].index); + // 缃俊搴� + Console.WriteLine("track score is:{0}", box_info[index].score); + // 浜鸿劯瀹藉害 + Console.WriteLine("track mWidth is:{0}", box_info[index].width); + // 涓績鐐筙,Y鍧愭爣 + Console.WriteLine("track mCenter_x is:{0}", box_info[index].center_x); + Console.WriteLine("track mCenter_y is:{0}", box_info[index].center_y); + // rgb 娲讳綋鍒嗗�� + Console.WriteLine("liveness score is:{0}", score_info[index].score); + + } + Marshal.FreeHGlobal(ptT); + } + + // 閫夋嫨usb瑙嗛鎽勫儚澶磇d,鏂规硶閲岄潰鏈夎幏鍙栬繛鎺ョ殑鎽勫儚澶村垪琛紝鍖呮嫭id锛屽悕绉板拰璺緞绛� + public int select_usb_device_id() + { + ArrayList capDevs = new ArrayList(); + int device_id = 0; + try + { + if (!File.Exists(Path.Combine(Environment.SystemDirectory, @"dpnhpast.dll"))) + { + Console.WriteLine("DirectX NOT installed!"); + return - 1; + } + if (!DevEnum.GetDevicesOfCat(FilterCategory.VideoInputDevice, out capDevs)) + { + Console.WriteLine("No video capture devices found!"); + return -1; + } + if (capDevs.Count < 2) + { + Console.WriteLine("ir and rgb camera devices needed"); + return -1; + } + foreach (DsDevice d in capDevs) { + Console.WriteLine("== VIDEO DEVICE (id:{0}) ==", d.id); + Console.WriteLine("Name: {0}", d.Name); + Console.WriteLine("Path: {0}", d.Path); + } + + if (capDevs.Count > 0) + { + device_id = ((DsDevice)capDevs[0]).id; + Console.WriteLine("select device id is:{0}", device_id); + } + } + catch(Exception) + { + if (capDevs != null) + { + foreach (DsDevice d in capDevs) + d.Dispose(); + capDevs = null; + } + return -1; + } + return device_id; + } + + // 鍙岀洰RGB鍜孖R闈欓粯娲讳綋妫�娴嬶紙鍙娇鐢ㄨ开濞佹嘲鎴栬娲惧皵绛塺gb+nir鍙岀洰鎽勫儚澶�),rgb鍜宯ir鐨勫垎鍊奸兘閫氳繃濡�0.8鎵嶇畻娲讳綋閫氳繃 + public bool rgb_ir_liveness_check_mat() + { + int max_face_num = 1;//鍙栨渶澶т汉鑴哥殑娲讳綋 + BDLivenessScore[] rgb_score_info = new BDLivenessScore[max_face_num]; + BDLivenessScore[] nir_score_info = new BDLivenessScore[max_face_num]; + int sizeScore = Marshal.SizeOf(typeof(BDLivenessScore)); + IntPtr ptSRGB = Marshal.AllocHGlobal(sizeScore * max_face_num); + IntPtr ptSNIR = Marshal.AllocHGlobal(sizeScore * max_face_num); + + // 鍒濆鍖杛gb 杩斿洖鐨勪汉鑴告暟鎹� + BDFaceBBox[] rgb_box_info = new BDFaceBBox[max_face_num]; + + int sizeBox = Marshal.SizeOf(typeof(BDFaceBBox)); + IntPtr ptTRGB = Marshal.AllocHGlobal(sizeBox * max_face_num); + + // 鍒濆鍖杗ir 杩斿洖鐨勪汉鑴告暟鎹� + BDFaceBBox[] nir_box_info = new BDFaceBBox[max_face_num]; + + sizeBox = Marshal.SizeOf(typeof(BDFaceBBox)); + IntPtr ptTNIR = Marshal.AllocHGlobal(sizeBox * max_face_num); + + // 搴忓彿0涓虹數鑴戣瘑鍒殑usb鎽勫儚澶寸紪鍙凤紝鏈琩emo涓�0涓篿r绾㈠鎽勫儚澶� + // 涓嶅悓鎽勫儚澶村拰鐢佃剳璇嗗埆鍙兘鏈夊尯鍒� + // 缂栧彿涓�鑸粠0-10 */ + int device = select_usb_device_id(); + VideoCapture camera1 = VideoCapture.FromCamera(device); + if(!camera1.IsOpened()) + { + Console.WriteLine("camera1 open error"); + return false; + } + + VideoCapture camera2 = VideoCapture.FromCamera(device+1); + if (!camera2.IsOpened()) + { + Console.WriteLine("camera2 open error"); + return false; + } + + Mat frame1 = new Mat(); + Mat frame2 = new Mat(); + Mat rgb_mat = new Mat(); + Mat ir_mat = new Mat(); + var window_ir = new Window("ir_face"); + var window_rgb = new Window("rgb_face"); + while (true) + { + camera1.Read(frame1); + camera2.Read(frame2); + if(!frame1.Empty() && !frame2.Empty()) + { + if (frame1.Channels() == 3) + { + rgb_mat = frame1; + ir_mat = frame2; + } + else + { + rgb_mat = frame2; + ir_mat = frame1; + } + float rgb_score = 0; + float ir_score = 0; + + int face_size = 0; + int nir_size = nir_liveness(ptTNIR, ptSNIR, ir_mat.CvPtr); + int rgb_size = rgb_liveness(ptTRGB, ptSRGB, rgb_mat.CvPtr); + + face_size = nir_size <= rgb_size?nir_size:rgb_size; + // 鑾峰彇鐨勪汉鑴告暟 + Console.WriteLine("faceNum is:{0}", face_size); + for (int index = 0; index < face_size; index++) + { + + IntPtr ptrBox = new IntPtr(); + IntPtr ptrRGBScore = new IntPtr(); + IntPtr ptrNIRScore = new IntPtr(); + if (8 == IntPtr.Size) + { + ptrBox = (IntPtr)(ptTRGB.ToInt64() + sizeBox * index); + ptrRGBScore = (IntPtr)(ptSRGB.ToInt64() + sizeScore * index); + ptrNIRScore = (IntPtr)(ptSNIR.ToInt64() + sizeScore * index); + } + else if (4 == IntPtr.Size) + { + ptrBox = (IntPtr)(ptTRGB.ToInt32() + sizeBox * index); + ptrRGBScore = (IntPtr)(ptSRGB.ToInt32() + sizeScore * index); + ptrNIRScore = (IntPtr)(ptSNIR.ToInt32() + sizeScore * index); + } + + rgb_box_info[index] = (BDFaceBBox)Marshal.PtrToStructure(ptrBox, typeof(BDFaceBBox)); + + rgb_score_info[index] = (BDLivenessScore)Marshal.PtrToStructure(ptrRGBScore, typeof(BDLivenessScore)); + nir_score_info[index] = (BDLivenessScore)Marshal.PtrToStructure(ptrNIRScore, typeof(BDLivenessScore)); + rgb_score = rgb_score_info[index].score; + ir_score = nir_score_info[index].score; + if (rgb_score <= 0.1f) + { + rgb_score = 0; + } + if (ir_score <= 0.1f) + { + ir_score = 0; + } + Console.WriteLine("demo ccccc"); + // 浜鸿劯瀹藉害 + Console.WriteLine("mWidth is:{0:f}", rgb_box_info[index].width); + // 涓績鐐筙,Y鍧愭爣 + Console.WriteLine("mCenter_x is:{0:f}", rgb_box_info[index].center_x); + Console.WriteLine("mCenter_y is:{0:f}", rgb_box_info[index].center_y); + + } + + string msg_depth = "ir score is:" + ir_score.ToString(); + + Cv2.PutText(ir_mat, msg_depth, new Point(20, 50), HersheyFonts.HersheyComplex, 1, new Scalar(255, 100, 0)); + + string msg_rgb = "rgb score is:" + rgb_score.ToString(); + Cv2.PutText(rgb_mat, msg_rgb, new Point(20, 50), HersheyFonts.HersheyComplex, 1, new Scalar(255, 100, 0)); + if (face_size > 0) + { + // 鐢讳汉鑴告 + FaceDraw.draw_rects(ref rgb_mat, face_size, rgb_box_info); + // 鐢诲叧閿偣 + // FaceDraw.draw_shape(ref rgb_mat, face_size, rgb_track_info); + } + window_rgb.ShowImage(rgb_mat); + window_ir.ShowImage(ir_mat); + Cv2.WaitKey(1); + } + } + Marshal.FreeHGlobal(ptTRGB); + Marshal.FreeHGlobal(ptTNIR); + rgb_mat.Release(); + ir_mat.Release(); + frame1.Release(); + frame2.Release(); + Cv2.DestroyWindow("ir_face"); + Cv2.DestroyWindow("rgb_face"); + return true; + } + // 鍙岀洰鎽勫儚澶磋繘琛宺gb,depth娲讳綋妫�娴�(姝ゅ閫傞厤浜嗗崕鏉拌壘绫崇殑鍙岀洰鎽勫儚澶�)rgb鍜宒epth鐨勫垎鍊奸兘閫氳繃濡�0.8鎵嶇畻娲讳綋閫氳繃 + public bool rgb_depth_liveness_check_hjimi() + { + int max_face_num = 1;//鍙栨渶澶т汉鑴哥殑娲讳綋 + + BDLivenessScore[] rgb_score_info = new BDLivenessScore[max_face_num]; + BDLivenessScore[] depth_score_info = new BDLivenessScore[max_face_num]; + int sizeScore = Marshal.SizeOf(typeof(BDLivenessScore)); + IntPtr ptRGBS = Marshal.AllocHGlobal(sizeScore * max_face_num); + IntPtr ptDepthS = Marshal.AllocHGlobal(sizeScore * max_face_num); + + BDFaceBBox[] box_info = new BDFaceBBox[max_face_num]; + + int sizeBox = Marshal.SizeOf(typeof(BDFaceBBox)); + IntPtr ptT = Marshal.AllocHGlobal(sizeBox * max_face_num); + IntPtr phjimi = HjimiCamera.new_hjimi(); + var rgb_win = new Window("rgb", WindowMode.AutoSize); + var depth_win = new Window("depth", WindowMode.Normal); + float rgb_score = 0; + float depth_score = 0; + Mat cv_depth = new Mat(); + Mat cv_rgb = new Mat(); + while (true) + { + bool ok = HjimiCamera.open_hjimimat(phjimi, cv_rgb.CvPtr, cv_depth.CvPtr); + if (!ok) + { + depth_score = 0; + rgb_score = depth_score; + Console.WriteLine("open camera faile"); + continue; + } + if(cv_rgb.Empty()) + { + continue; + } + if (cv_depth.Empty()) + { + continue; + } + // 杩斿洖浜鸿劯涓暟 + int face_size = rgb_depth_liveness(ptT, ptRGBS, ptDepthS, cv_rgb.CvPtr, cv_depth.CvPtr); + + Console.WriteLine("res is:{0}", face_size); + depth_score = 0; + rgb_score = depth_score; + for (int index = 0; index < face_size; index++) + { + IntPtr ptrBox = new IntPtr(); + IntPtr ptrRGBScore = new IntPtr(); + IntPtr ptrDepthScore = new IntPtr(); + if (8 == IntPtr.Size) + { + ptrBox = (IntPtr)(ptT.ToInt64() + sizeBox * index); + ptrRGBScore = (IntPtr)(ptRGBS.ToInt64() + sizeScore * index); + ptrDepthScore = (IntPtr)(ptDepthS.ToInt64() + sizeScore * index); + } + else if (4 == IntPtr.Size) + { + ptrBox = (IntPtr)(ptT.ToInt32() + sizeBox * index); + ptrRGBScore = (IntPtr)(ptRGBS.ToInt32() + sizeScore * index); + ptrDepthScore = (IntPtr)(ptDepthS.ToInt32() + sizeScore * index); + } + + box_info[index] = (BDFaceBBox)Marshal.PtrToStructure(ptrBox, typeof(BDFaceBBox)); + + rgb_score_info[index] = (BDLivenessScore)Marshal.PtrToStructure(ptrRGBScore, typeof(BDLivenessScore)); + rgb_score = rgb_score_info[index].score; + depth_score_info[index] = (BDLivenessScore)Marshal.PtrToStructure(ptrDepthScore, typeof(BDLivenessScore)); + depth_score = depth_score_info[index].score; + // 鍒嗗�煎お浣庯紝浼氭樉绀哄皬鏁扮偣澶暱锛岀洿鎺ヨ祴鍊�0 + if (depth_score <= 0.1f) + { + depth_score = 0; + } + if (rgb_score <= 0.1f) + { + rgb_score = 0; + } + // 浜鸿劯瀹藉害 + Console.WriteLine("mWidth is:{0:f}", box_info[index].width); + // 涓績鐐筙,Y鍧愭爣 + Console.WriteLine("mCenter_x is:{0:f}", box_info[index].center_x); + Console.WriteLine("mCenter_y is:{0:f}", box_info[index].center_y); + + } + + + Mat depth_img = new Mat(); + cv_depth.ConvertTo(depth_img, MatType.CV_8UC1, 255.0 / 4500); + string msg_depth = "depth score is:" + depth_score.ToString(); + Cv2.PutText(depth_img, msg_depth, new Point(20, 50), HersheyFonts.HersheyComplex, 1, new Scalar(255, 100, 0)); + + string msg_rgb = "rgb score is:" + rgb_score.ToString(); + Cv2.PutText(cv_rgb, msg_rgb, new Point(20, 50), HersheyFonts.HersheyComplex, 1, new Scalar(255, 100, 0)); + if (face_size > 0) + { + // 鐢讳汉鑴告 + FaceDraw.draw_rects(ref cv_rgb, face_size, box_info); + + } + + rgb_win.ShowImage(cv_rgb); + depth_win.ShowImage(depth_img); + Cv2.WaitKey(1); + depth_img.Release(); + } + Marshal.FreeHGlobal(ptT); + cv_rgb.Release(); + cv_depth.Release(); + Cv2.DestroyWindow("rgb"); + Cv2.DestroyWindow("depth"); + HjimiCamera.hjimi_release(phjimi); + return true; + } + //鍙岀洰RGB鍜孌EPTH闈欓粯娲讳綋妫�娴嬶紙浼犲叆opencv瑙嗛甯�)閫傞厤濂ユ瘮涓厜娴风嚂绛夊弻鐩憚鍍忓ご + public bool rgb_depth_liveness_check_orbe() + { + int max_face_num = 1;//鍙栨渶澶т汉鑴哥殑娲讳綋 + + BDLivenessScore[] rgb_score_info = new BDLivenessScore[max_face_num]; + BDLivenessScore[] depth_score_info = new BDLivenessScore[max_face_num]; + int sizeScore = Marshal.SizeOf(typeof(BDLivenessScore)); + IntPtr ptRGBS = Marshal.AllocHGlobal(sizeScore * max_face_num); + IntPtr ptDepthS = Marshal.AllocHGlobal(sizeScore * max_face_num); + + BDFaceBBox[] box_info = new BDFaceBBox[max_face_num]; + + int sizeBox = Marshal.SizeOf(typeof(BDFaceTrackInfo)); + IntPtr ptT = Marshal.AllocHGlobal(sizeBox * max_face_num); + + IntPtr porbe = OrbeCamera.new_orbe(); + var rgb_win = new Window("rgb", WindowMode.AutoSize); + var depth_win = new Window("depth", WindowMode.Normal); + float rgb_score = 0; + float depth_score = 0; + Mat cv_depth = new Mat(); + Mat cv_rgb = new Mat(); + while (true) + { + int res_ok = OrbeCamera.open_orbe(porbe, cv_rgb.CvPtr, cv_depth.CvPtr); + if (res_ok != 0) + { + depth_score = 0; + rgb_score = depth_score; + Console.WriteLine("open camera faile"); + continue; + } + if (cv_rgb.Empty()) + { + continue; + } + if (cv_depth.Empty()) + { + continue; + } + // 杩斿洖浜鸿劯涓暟 + int face_size = rgb_depth_liveness(ptT, ptRGBS, ptDepthS, cv_rgb.CvPtr, cv_depth.CvPtr); + + Console.WriteLine("res is:{0}", face_size); + depth_score = 0; + rgb_score = depth_score; + for (int index = 0; index < face_size; index++) + { + IntPtr ptrBox = new IntPtr(); + IntPtr ptrRGBScore = new IntPtr(); + IntPtr ptrDepthScore = new IntPtr(); + if (8 == IntPtr.Size) + { + ptrBox = (IntPtr)(ptT.ToInt64() + sizeBox * index); + ptrRGBScore = (IntPtr)(ptRGBS.ToInt64() + sizeScore * index); + ptrDepthScore = (IntPtr)(ptDepthS.ToInt64() + sizeScore * index); + } + else if (4 == IntPtr.Size) + { + ptrBox = (IntPtr)(ptT.ToInt32() + sizeBox * index); + ptrRGBScore = (IntPtr)(ptRGBS.ToInt32() + sizeScore * index); + ptrDepthScore = (IntPtr)(ptDepthS.ToInt32() + sizeScore * index); + } + + box_info[index] = (BDFaceBBox)Marshal.PtrToStructure(ptrBox, typeof(BDFaceBBox)); + + rgb_score_info[index] = (BDLivenessScore)Marshal.PtrToStructure(ptrRGBScore, typeof(BDLivenessScore)); + rgb_score = rgb_score_info[index].score; + depth_score_info[index] = (BDLivenessScore)Marshal.PtrToStructure(ptrDepthScore, typeof(BDLivenessScore)); + depth_score = depth_score_info[index].score; + // 鍒嗗�煎お浣庯紝浼氭樉绀哄皬鏁扮偣澶暱锛岀洿鎺ヨ祴鍊�0 + if (depth_score <= 0.1f) + { + depth_score = 0; + } + if (rgb_score <= 0.1f) + { + rgb_score = 0; + } + // 浜鸿劯瀹藉害 + Console.WriteLine("mWidth is:{0:f}", box_info[index].width); + // 涓績鐐筙,Y鍧愭爣 + Console.WriteLine("mCenter_x is:{0:f}", box_info[index].center_x); + Console.WriteLine("mCenter_y is:{0:f}", box_info[index].center_y); + + } + + + Mat depth_img = new Mat(); + cv_depth.ConvertTo(depth_img, MatType.CV_8UC1, 255.0 / 4500); + string msg_depth = "depth score is:" + depth_score.ToString(); + Cv2.PutText(depth_img, msg_depth, new Point(20, 50), HersheyFonts.HersheyComplex, 1, new Scalar(255, 100, 0)); + + string msg_rgb = "rgb score is:" + rgb_score.ToString(); + Cv2.PutText(cv_rgb, msg_rgb, new Point(20, 50), HersheyFonts.HersheyComplex, 1, new Scalar(255, 100, 0)); + if (face_size > 0) + { + // 鐢讳汉鑴告 + FaceDraw.draw_rects(ref cv_rgb, face_size, box_info); + } + rgb_win.ShowImage(cv_rgb); + depth_win.ShowImage(depth_img); + Cv2.WaitKey(1); + depth_img.Release(); + } + Marshal.FreeHGlobal(ptT); + cv_rgb.Release(); + cv_depth.Release(); + Cv2.DestroyWindow("rgb"); + Cv2.DestroyWindow("depth"); + OrbeCamera.orbe_release(porbe); + return true; + } + + public void test_rgb_ir_liveness_check_by_opencv() + { + rgb_ir_liveness_check_mat(); + } + + // 鍙岀洰RGB鍜孌EPTH闈欓粯娲讳綋妫�娴�,閫傞厤濂ユ瘮涓厜娴风嚂绛夊弻鐩憚鍍忓ご + public void test_rgb_depth_liveness_check_by_orbe() + { + rgb_depth_liveness_check_orbe(); + } + + // 鍙岀洰鎽勫儚澶磋繘琛宺gb,depth娲讳綋妫�娴�(姝ゅ閫傞厤浜嗗崕鏉拌壘绫崇殑鍙岀洰鎽勫儚澶�) + public void test_rgb_depth_liveness_check_by_hjimi() + { + rgb_depth_liveness_check_hjimi(); + } + } +} diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/FaceAI/FaceManager.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/FaceAI/FaceManager.cs" new file mode 100644 index 0000000..e01b594 --- /dev/null +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/FaceAI/FaceManager.cs" @@ -0,0 +1,209 @@ +锘縰sing System; +using System.Runtime.InteropServices; +using OpenCvSharp; +/** + * 澶囨敞锛堜汉鑴告暟鎹簱绠$悊璇存槑锛夛細 + * 浜鸿劯鏁版嵁搴撲负閲囩敤sqlite3鐨勬暟鎹簱锛屼細鑷姩鐢熸垚涓�涓猟b鐩綍澶癸紝涓嬮潰鏈夋暟鎹簱face.db鏂囦欢淇濆瓨鏁版嵁搴� + * 鍙敤sqliteExpert涔嬬被鐨勫彲瑙嗗寲宸ュ叿鎵撳紑鏌ョ湅,浜﹀彲鐢ㄥ懡浠よ锛屾柟娉曡鑷鐧惧害銆� + * 璇ユ暟鎹簱浠呬粎鍙�傚簲浜�5w浜哄乏鍙崇殑浜鸿劯搴擄紝涓旇璁¤〃鏍肩瓑灞炰簬灏忓瀷閫氱敤鍖栥�� + * 鑻ヤ笉鑳芥弧瓒冲鎴蜂釜鎬у寲闇�姹傦紝瀹㈡埛鍙嚜琛岃璁℃暟鎹簱淇濆瓨鏁版嵁銆傚畻鏃ㄥ氨鏄瘡涓汉鑴稿浘鐗囨彁鍙栦竴涓壒寰佸�间繚瀛樸�� + * 浜鸿劯1:1,1:N姣斿鍙婅瘑鍒疄闄呭氨鏄壒寰佸�肩殑姣斿銆�1:1鍙鎻愬彇2寮犱笉鍚岀殑鍥剧墖鐗瑰緛鍊艰皟鐢╟ompare_feature姣斿銆� + * 1锛歂鏄彁鍙栦竴涓壒寰佸�煎拰鏁版嵁搴撲腑宸蹭繚瀛樼殑N涓壒寰佸�间竴涓�姣斿(姣斿閫熷害寰堝揩锛屼笉鐢ㄦ媴蹇冩晥鐜囬棶棰�)锛� + * 鏈�缁堝彇鍒嗘暟楂樼殑鍊间负鏈�楂樼浉浼煎害銆� + * 鐩镐技搴﹁瘑鍒殑鍒嗘暟鍙嚜琛屾祴璇曟牴鎹疄楠岀粨鏋滄嫙瀹氾紝涓�鑸帹鑽愮浉浼煎害澶т簬80鍒嗕负鍚屼竴浜恒�� + * + */ +namespace FaceAI +{ + class FaceManager + { + // 浜鸿劯娉ㄥ唽(浼犵壒寰佸��,鐗瑰緛鍊煎彲鍙傝�僃aceFeature.cs鎻愬彇锛屼害鍙弬鑰僃aceCompare.cs鏌ョ湅鐗瑰緛鍊肩殑姣斿) + [DllImport("BaiduFaceApi.dll", EntryPoint = "user_add", CharSet = CharSet.Ansi + , CallingConvention = CallingConvention.Cdecl)] + private static extern IntPtr user_add(ref BDFaceFeature f1, string user_id, string group_id, + string user_info=""); + + // 浜鸿劯娉ㄥ唽(浼爋pencv鍥剧墖甯�,鐗瑰緛鍊煎彲鍙傝�僃aceFeature.cs鎻愬彇锛屼害鍙弬鑰僃aceCompare.cs鏌ョ湅鐗瑰緛鍊肩殑姣斿) + [DllImport("BaiduFaceApi.dll", EntryPoint = "user_add_by_mat", CharSet = CharSet.Ansi + , CallingConvention = CallingConvention.Cdecl)] + private static extern IntPtr user_add_by_mat(IntPtr mat, string user_id, string group_id, + string user_info = ""); + + // 浜鸿劯鏇存柊(浼犲浘鐗囧抚) + [DllImport("BaiduFaceApi.dll", EntryPoint = "user_update", CharSet = CharSet.Ansi + , CallingConvention = CallingConvention.Cdecl)] + private static extern IntPtr user_update(IntPtr mat, string user_id, string group_id, + string user_info = ""); + + // 鐢ㄦ埛鍒犻櫎 + [DllImport("BaiduFaceApi.dll", EntryPoint = "user_delete", CharSet = CharSet.Ansi + , CallingConvention = CallingConvention.Cdecl)] + private static extern IntPtr user_delete(string user_id, string group_id); + // 缁勬坊鍔� + [DllImport("BaiduFaceApi.dll", EntryPoint = "group_add", CharSet = CharSet.Ansi + , CallingConvention = CallingConvention.Cdecl)] + private static extern IntPtr group_add(string group_id); + // 缁勫垹闄� + [DllImport("BaiduFaceApi.dll", EntryPoint = "group_delete", CharSet = CharSet.Ansi + , CallingConvention = CallingConvention.Cdecl)] + private static extern IntPtr group_delete(string group_id); + // 鏌ヨ鐢ㄦ埛淇℃伅 + [DllImport("BaiduFaceApi.dll", EntryPoint = "get_user_info", CharSet = CharSet.Ansi + , CallingConvention = CallingConvention.Cdecl)] + private static extern IntPtr get_user_info(string user_id, string group_id); + + // 鏌ヨ鐢ㄦ埛鍥剧墖 + [DllImport("BaiduFaceApi.dll", EntryPoint = "get_user_image", CharSet = CharSet.Ansi + , CallingConvention = CallingConvention.Cdecl)] + private static extern int get_user_image(IntPtr out_mat, string user_id, string group_id); + + // 鐢ㄦ埛缁勫垪琛ㄦ煡璇� + [DllImport("BaiduFaceApi.dll", EntryPoint = "get_user_list", CharSet = CharSet.Ansi + , CallingConvention = CallingConvention.Cdecl)] + private static extern IntPtr get_user_list(string group_id, int start = 0, int length = 100); + // 缁勫垪琛ㄦ煡璇� + [DllImport("BaiduFaceApi.dll", EntryPoint = "get_group_list", CharSet = CharSet.Ansi + , CallingConvention = CallingConvention.Cdecl)] + private static extern IntPtr get_group_list(int start = 0, int length = 100); + + // 鏁版嵁搴撲汉鑴告暟閲忔煡璇� + [DllImport("BaiduFaceApi.dll", EntryPoint = "db_face_count", CharSet = CharSet.Ansi + , CallingConvention = CallingConvention.Cdecl)] + private static extern int db_face_count(string group_id); + + + // 娴嬭瘯浜鸿劯娉ㄥ唽 + public void test_user_add() + { + // 浜鸿劯娉ㄥ唽 + string user_id = "test_user"; + string group_id = "test_group"; + string file_name = "../images/1.jpg"; + + string user_info = "user_info"; + // 鎻愬彇浜鸿劯鐗瑰緛鍊兼暟缁勶紙澶氫汉浼氭彁鍙栧涓汉鐨勭壒寰佸�硷級 +/* + FaceFeature feature = new FaceFeature(); + BDFaceFeature[] feaList1 = feature.test_get_face_feature_by_path(file_name + if (feaList1 == null) + { + Console.WriteLine("get feature fail"); + return; + } + // 鍋囪娴嬭瘯鐨勫浘鐗囨槸1涓汉锛� + BDFaceFeature f1 = feaList1[0]; + // 浜鸿劯娉ㄥ唽 (浼犵壒寰佸�间汉鑴告敞鍐岋紝璇ユ柟娉曟敞鍐屼笉淇濆瓨浜鸿劯鍥剧墖鍏ュ簱) + IntPtr ptr = user_add(ref f1, user_id, group_id, user_info); + string buf = Marshal.PtrToStringAnsi(ptr); + Console.WriteLine("user_add res is:" + buf); +*/ + // 閫氳繃鍥剧墖甯т汉鑴告敞鍐岋紙鍙湁璇ユ柟娉曡繘琛岀殑浜鸿劯娉ㄥ唽锛屼汉鑴稿簱鎵嶄細淇濆瓨浜鸿劯鍥剧墖) + Mat mat = Cv2.ImRead(file_name); + IntPtr mptr = user_add_by_mat(mat.CvPtr, user_id, group_id, user_info); + string mbuf = Marshal.PtrToStringAnsi(mptr); + Console.WriteLine("user_add_by_mat res is:" + mbuf); + } + + // 娴嬭瘯浜鸿劯鏇存柊 + public void test_user_update() + { + string user_id = "test_user"; + string group_id = "test_group"; + string file_name = "../images/1.jpg"; + Mat mat = Cv2.ImRead(file_name); + string user_info = "user_info"; + // 浜鸿劯鏇存柊 + IntPtr ptr = user_update(mat.CvPtr, user_id, group_id, user_info); + string buf = Marshal.PtrToStringAnsi(ptr); + Console.WriteLine("user_update res is:" + buf); + } + + // 娴嬭瘯鐢ㄦ埛鍒犻櫎 锛堢敤鎴峰垹闄ゅ悗锛屼汉鑴告暟鎹篃琚垹闄わ級 + public void test_user_delete() + { + string user_id = "test_user"; + string group_id = "test_group"; + IntPtr ptr = user_delete(user_id, group_id); + string buf = Marshal.PtrToStringAnsi(ptr); + Console.WriteLine("user_delete res is:" + buf); + } + + // 缁勬坊鍔� + public void test_group_add() + { + string group_id = "test_group2"; + IntPtr ptr = group_add(group_id); + string buf = Marshal.PtrToStringAnsi(ptr); + Console.WriteLine("group_add res is:" + buf); + } + + // 缁勫垹闄� + public void test_group_delete() + { + string group_id = "test_group2"; + IntPtr ptr = group_delete(group_id); + string buf = Marshal.PtrToStringAnsi(ptr); + Console.WriteLine("group_delete res is:" + buf); + } + + // 鏌ヨ鐢ㄦ埛淇℃伅 + public void test_get_user_info() + { + string user_id = "test_user"; + string group_id = "test_group"; + IntPtr ptr = get_user_info(user_id , group_id); + string buf = Marshal.PtrToStringAnsi(ptr); + Console.WriteLine("get_user_info res is:" + buf); + } + + // 鏌ヨ鐢ㄦ埛鍥剧墖 + public void test_get_user_image() + { + string user_id = "test_user"; + string group_id = "test_group"; + Mat out_mat = new Mat(); + int res = get_user_image(out_mat.CvPtr, user_id, group_id); + if (res == 0) + { + Console.WriteLine("get_user_image success"); + // 鍥剧墖淇濆瓨鍒版湰鍦� + out_mat.ImWrite("user.jpg"); + } + else + { + Console.WriteLine("get_user_image error{0}:", res); + } + + } + + // 鐢ㄦ埛缁勫垪琛ㄦ煡璇� + public void test_get_user_list() + { + string group_id = "test_group"; + IntPtr ptr = get_user_list(group_id); + string buf = Marshal.PtrToStringAnsi(ptr); + Console.WriteLine("get_user_list res is:" + buf); + } + + // 缁勫垪琛ㄦ煡璇� + public void test_get_group_list() + { + IntPtr ptr = get_group_list(); + string buf = Marshal.PtrToStringAnsi(ptr); + Console.WriteLine("get_group_list res is:" + buf); + } + + // 浜鸿劯搴撴暟閲忔煡璇� + public void test_db_face_count() + { + string group_id = "test_group"; + // 鍙傛暟浼犵粍id琛ㄧず鏌ヨ缁勯兘浜鸿劯鏁伴噺 + int count = db_face_count(group_id); + Console.WriteLine("count is:" + count); + string group_id2 = null; + // 鍙傛暟浼爊ull琛ㄧず鏌ユ暣涓簱 + int count2 = db_face_count(group_id2); + Console.WriteLine("all count is:" + count2); + } + } +} diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/FaceAI/FaceTrack.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/FaceAI/FaceTrack.cs" new file mode 100644 index 0000000..156e38a --- /dev/null +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/FaceAI/FaceTrack.cs" @@ -0,0 +1,221 @@ +锘縰sing System; +using System.Runtime.InteropServices; +using System.Collections.Generic; +using OpenCvSharp; + +// 浜鸿劯璺熻釜 +namespace FaceAI +{ + // 浜鸿劯璺熻釜閰嶇疆缁撴瀯浣� + [StructLayout(LayoutKind.Sequential, Pack = 1)] + struct BDFaceTrackConf + { + public float detect_intv_before_track; // 鏈窡韪埌浜鸿劯鍓嶇殑妫�娴嬫椂闂撮棿闅� + public float detect_intv_during_track; // 宸茶窡韪埌浜鸿劯鍚庣殑妫�娴嬫椂闂撮棿闅� + }; + + [StructLayout(LayoutKind.Sequential, Pack = 1)] + public struct BDFaceBBox + { + public int index; // 浜鸿劯绱㈠紩鍊� + public float center_x; // 浜鸿劯涓績鐐箈鍧愭爣 + public float center_y; // 浜鸿劯涓績鐐箉鍧愭爣 + public float width; // 浜鸿劯瀹藉害 + public float height; // 浜鸿劯楂樺害 + public float score; // 浜鸿劯缃俊搴� + } + + [StructLayout(LayoutKind.Sequential, Pack = 1)] + public struct BDFaceLandmark + { + public int index; // 浜鸿劯鍏抽敭鐐圭储寮曞�� + public int size; // 浜鸿劯鍏抽敭鐐规暟閲� + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 144)] + public float[] data;// = new float[144]; + public float score; // 浜鸿劯鍏抽敭鐐圭疆淇″害 + } + [StructLayout(LayoutKind.Sequential, Pack = 1)] + public struct BDFaceTrackInfo + { + public int face_id; + [MarshalAs(UnmanagedType.Struct)] + public BDFaceBBox box; + [MarshalAs(UnmanagedType.Struct)] + public BDFaceLandmark landmark; + } + + // 浜鸿劯璺熻釜 + class FaceTrack + { + [DllImport("BaiduFaceApi.dll", EntryPoint = "track", CharSet = CharSet.Ansi + , CallingConvention = CallingConvention.Cdecl)] + // type 涓�0鏃跺�欐墽琛孯GB浜鸿劯璺熻釜锛�1鏃跺�欐墽琛孨IR浜鸿劯璺熻釜 + public static extern int track(IntPtr ptr, IntPtr mat, int type); + + [DllImport("BaiduFaceApi.dll", EntryPoint = "clear_track_history", CharSet = CharSet.Ansi + , CallingConvention = CallingConvention.Cdecl)] + // type 涓�0鏃跺�欐墽琛孯GB浜鸿劯璺熻釜锛�1鏃跺�欐墽琛孨IR浜鸿劯璺熻釜 + public static extern void clear_track_history(int type); + + // 娴嬭瘯浜鸿劯璺熻釜 + public void image_track() + { + Console.WriteLine("test_track"); + int max_track_num = 50; // 璁剧疆鏈�澶氭娴嬭窡韪汉鏁帮紙澶氫汉鑴告娴嬶級锛岄粯璁や负1锛屾渶澶氬彲璁句负50 + + BDFaceTrackInfo[] track_info = new BDFaceTrackInfo[max_track_num]; + for (int i = 0; i < max_track_num; i++) + { + track_info[i] = new BDFaceTrackInfo(); + track_info[i].box = new BDFaceBBox(); + track_info[i].box.score = 0; + track_info[i].box.width = 0; + track_info[i].landmark.data = new float[144]; + track_info[i].face_id = 0; + } + int sizeTrack = Marshal.SizeOf(typeof(BDFaceTrackInfo)); + IntPtr ptT = Marshal.AllocHGlobal(sizeTrack * max_track_num); + Mat mat = Cv2.ImRead("../images/2.jpg"); + // faceNum涓鸿繑鍥炵殑妫�娴嬪埌鐨勪汉鑴镐釜鏁� + int type = 0; + int faceNum = track(ptT, mat.CvPtr, type); + Console.WriteLine("faceSize is:" + faceNum); + // 鍥犱负闇�棰勫垎閰嶅唴瀛橈紝鎵�浠ヨ繑鍥炵殑浜鸿劯鏁拌嫢澶т簬棰勫厛鍒嗛厤鐨勫唴瀛樻暟锛屽垯浠呬粎鏄剧ず棰勫垎閰嶇殑浜鸿劯鏁� + if (faceNum > max_track_num) + { + faceNum = max_track_num; + } + for (int index = 0; index < faceNum; index++) { + + IntPtr ptr = new IntPtr(); + if (8 == IntPtr.Size) + { + ptr = (IntPtr)(ptT.ToInt64() + sizeTrack * index); + } + else if (4 == IntPtr.Size) + { + ptr = (IntPtr)(ptT.ToInt32() + sizeTrack * index); + } + + track_info[index] = (BDFaceTrackInfo)Marshal.PtrToStructure(ptr, typeof(BDFaceTrackInfo)); + Console.WriteLine("track face_id is {0}:", track_info[index].face_id); + Console.WriteLine("track landmarks is:"); + + for(int i = 0; i < 144; i++) + { + Console.WriteLine("lanmark data is {0}:", track_info[index].landmark.data[i]); + } + Console.WriteLine("track landmarks score is:{0}", track_info[index].landmark.score); + Console.WriteLine("track landmarks index is:{0}", track_info[index].landmark.index); + + // 绱㈠紩鍊� + Console.WriteLine("track score is:{0}", track_info[index].box.index); + // 缃俊搴� + Console.WriteLine("track score is:{0}", track_info[index].box.score); + // 浜鸿劯瀹藉害 + Console.WriteLine("track mWidth is:{0}", track_info[index].box.width); + // 涓績鐐筙,Y鍧愭爣 + Console.WriteLine("track mCenter_x is:{0}", track_info[index].box.center_x); + Console.WriteLine("track mCenter_y is:{0}", track_info[index].box.center_y); + } + // 鐢讳汉鑴告 + FaceDraw.draw_rects(ref mat, faceNum, track_info); + // 鍥剧墖鐢绘淇濆瓨 + mat.ImWrite("track.jpg"); + Marshal.FreeHGlobal(ptT); + } + + //usb鎽勫儚澶村疄鏃朵汉鑴告娴嬬ず渚� + public void usb_video_track() + { + // 榛樿鐢佃剳鑷甫鎽勫儚澶达紝device鍙兘涓�0锛岃嫢澶栨帴usb鎽勫儚澶达紝鍒檇evice鍙兘涓�1. + int dev = 0; + using (var window = new Window("face")) + using (VideoCapture cap = VideoCapture.FromCamera(dev)) + { + if (!cap.IsOpened()) + { + Console.WriteLine("open camera error"); + return; + } + // Frame image buffer + Mat image = new Mat(); + // When the movie playback reaches end, Mat.data becomes NULL. + while (true) + { + cap.Read(image); // same as cvQueryFrame + if (!image.Empty()) + { + int ilen = 10;//浼犲叆鐨勪汉鑴告暟 + BDFaceTrackInfo[] track_info = new BDFaceTrackInfo[ilen]; + for (int i = 0; i < ilen; i++) + { + track_info[i].box = new BDFaceBBox(); + track_info[i].box.score = 0; + track_info[i].box.width = 0; + track_info[i].landmark.data = new float[144]; + track_info[i].face_id = 0; + } + int sizeTrack = Marshal.SizeOf(typeof(BDFaceTrackInfo)); + IntPtr ptT = Marshal.AllocHGlobal(sizeTrack* ilen); + //Cv2.ImWrite("usb_track_Cv2.jpg", image); + /* trackMat + * 浼犲叆鍙傛暟: maxTrackObjNum:妫�娴嬪埌鐨勬渶澶т汉鑴告暟锛屼紶鍏ュ閮ㄥ垎閰嶄汉鑴告暟锛岄渶瑕佸垎閰嶅搴旂殑鍐呭瓨澶у皬銆� + * 浼犲嚭妫�娴嬪埌鐨勬渶澶т汉鑴告暟 + * 杩斿洖鍊�: 浼犲叆鐨勪汉鑴告暟 鍜� 妫�娴嬪埌鐨勪汉鑴告暟 涓殑鏈�灏忓��,瀹為檯杩斿洖鐨勪汉鑴搞�� + ****/ + int faceSize = ilen;//杩斿洖浜鸿劯鏁� 鍒嗛厤浜鸿劯鏁板拰妫�娴嬪埌浜鸿劯鏁扮殑鏈�灏忓�� + int curSize = ilen;//褰撳墠浜鸿劯鏁� 杈撳叆鍒嗛厤鐨勪汉鑴告暟锛岃緭鍑哄疄闄呮娴嬪埌鐨勪汉鑴告暟 + int type = 0; + faceSize = track(ptT, image.CvPtr, type); + for (int index = 0; index < faceSize; index++) + { + IntPtr ptr = new IntPtr(); + if( 8 == IntPtr.Size) + { + ptr = (IntPtr)(ptT.ToInt64() + sizeTrack * index); + } + else if(4 == IntPtr.Size) + { + ptr = (IntPtr)(ptT.ToInt32() + sizeTrack * index); + } + + track_info[index] = (BDFaceTrackInfo)Marshal.PtrToStructure(ptr, typeof(BDFaceTrackInfo)); + //face_info[index] = (BDFaceBBox)Marshal.PtrToStructure(info_ptr, typeof(BDFaceBBox)); + Console.WriteLine("in Liveness::usb_track face_id is {0}:",track_info[index].face_id); + Console.WriteLine("in Liveness::usb_track landmarks is:"); + + Console.WriteLine("in Liveness::usb_track score is:{0:f}", track_info[index].box.score); + // 浜鸿劯瀹藉害 + Console.WriteLine("in Liveness::usb_track mWidth is:{0:f}", track_info[index].box.width); + // 涓績鐐筙,Y鍧愭爣 + Console.WriteLine("in Liveness::usb_track mCenter_x is:{0:f}", track_info[index].box.center_x); + Console.WriteLine("in Liveness::usb_track mCenter_y is:{0:f}", track_info[index].box.center_y); + + } + + FaceDraw.draw_rects(ref image, faceSize, track_info); + // FaceDraw.draw_shape(ref image, faceSize, track_info); + Marshal.FreeHGlobal(ptT); + window.ShowImage(image); + Cv2.WaitKey(1); + Console.WriteLine("mat not empty"); + } + else + { + Console.WriteLine("mat is empty"); + } + } + } + } + + // 娓呴櫎璺熻釜鐨勪汉鑴镐俊鎭� + public void test_clear_tracked_faces() + { + int type = 0; + clear_track_history(type); + Console.WriteLine("after clear tracked faces"); + } + + } + } diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/FaceAI/FileUtil.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/FaceAI/FileUtil.cs" new file mode 100644 index 0000000..6f1e815 --- /dev/null +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/FaceAI/FileUtil.cs" @@ -0,0 +1,23 @@ +锘縰sing System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.IO; + +namespace FaceAI +{ + class FileUtil + { + // 鎶奲yte淇濆瓨鎴愪簩杩涘埗鏂囦欢 + public static void byte2file(string file_name, byte[] b, int len) + { + FileStream fs = new FileStream(file_name, FileMode.OpenOrCreate); + BinaryWriter bw = new BinaryWriter(fs); + bw.Write(b, 0, len); + bw.Close(); + fs.Close(); + + } + } +} diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/FaceAI/HjimiCamera.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/FaceAI/HjimiCamera.cs" new file mode 100644 index 0000000..8d3e15e --- /dev/null +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/FaceAI/HjimiCamera.cs" @@ -0,0 +1,25 @@ +锘縰sing System; +using System.IO; +using System.Collections; +using System.Runtime.InteropServices; +using System.Collections.Generic; +using OpenCvSharp; + +namespace FaceAI +{ + class HjimiCamera + { + // 鍗庢澃鑹剧背 鑾峰彇鎽勫儚澶磋澶囧璞� + [DllImport("AimiCamera.dll", EntryPoint = "new_hjimi", CharSet = CharSet.Ansi + , CallingConvention = CallingConvention.Cdecl)] + public static extern IntPtr new_hjimi(); + // 鍗庢澃鑹剧背 閲婃斁鎽勫儚澶磋澶囧璞� + [DllImport("AimiCamera.dll", EntryPoint = "hjimi_release", CharSet = CharSet.Ansi + , CallingConvention = CallingConvention.Cdecl)] + public static extern void hjimi_release(IntPtr hjimi); + // 鍗庢澃鑹剧背 鎵撳紑鎽勫儚澶磋澶囧璞� 浼犲叆opencv瑙嗛甯gb鍜宒epth鐨刴at + [DllImport("AimiCamera.dll", EntryPoint = "open_hjimimat", CharSet = CharSet.Ansi + , CallingConvention = CallingConvention.Cdecl)] + public static extern bool open_hjimimat(IntPtr hjimi, IntPtr rgb_mat, IntPtr depth_mat); + } +} \ No newline at end of file diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/FaceAI/ImageUtil.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/FaceAI/ImageUtil.cs" new file mode 100644 index 0000000..79d0054 --- /dev/null +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/FaceAI/ImageUtil.cs" @@ -0,0 +1,69 @@ +锘縰sing System; +using System.IO; +using OpenCvSharp; +using System.Drawing; + + +namespace FaceAI +{ + class ImageUtil + { + // 鍥剧墖鏂囦欢杞珺ase64String + public static string img2byte(string filePath) + { + // 鍙繚鐣欐枃浠跺悕锛岄伩鍏嶈矾寰勯敊璇� + string fileName = Path.GetFileName(filePath); + + // 鑾峰彇鏂囦欢鐨勫畬鏁磋矾寰� + string fullPath = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "image", fileName); + + if (!File.Exists(fullPath)) + { + throw new FileNotFoundException("鏂囦欢涓嶅瓨鍦細" + fullPath); + } + + using (FileStream filestream = new FileStream(fullPath, FileMode.Open, FileAccess.Read)) + { + byte[] arr = new byte[filestream.Length]; + filestream.Read(arr, 0, arr.Length); + return Convert.ToBase64String(arr); + } + + ////灏咺mage杞崲鎴愭祦鏁版嵁锛屽苟淇濆瓨涓篵yte[] + //MemoryStream mstream = new MemoryStream(); + //img.Save(mstream, System.Drawing.Imaging.ImageFormat.Jpeg); + //byte[] byData = new Byte[mstream.Length]; + //mstream.Position = 0; + //mstream.Read(byData, 0, byData.Length); + //mstream.Close(); + //return byData; + } + // 鍥剧墖鏂囦欢杞琤ytes + public static byte[] get_img_data(string img_path) + { + //鏍规嵁鍥剧墖鏂囦欢鐨勮矾寰勪娇鐢ㄦ枃浠舵祦鎵撳紑锛屽苟淇濆瓨涓篵yte[] + FileStream fs = new FileStream(img_path, FileMode.Open);//鍙互鏄叾浠栭噸杞芥柟娉� + byte[] byData = new byte[fs.Length]; + fs.Read(byData, 0, byData.Length); + fs.Close(); + return byData; + } + // bytes杞浘鐗囨枃浠� + //public static void byte2img(byte[] b, int len, string file_name) + //{ + // MemoryStream ms = new MemoryStream(b); + // ms.Position = 0; + // System.Drawing.Image img = System.Drawing.Image.FromStream(ms); + // img.Save(file_name); + // ms.Close(); + //} + //// 浜岃繘鍒禸yte鍥剧墖娴佽浆mat绀轰緥 + //public static Mat image2mat(string img_path) + //{ + // System.Drawing.Image img = System.Drawing.Image.FromFile(img_path); + // byte[] img_bytes = ImageUtil.img2byte(img); + // Mat mat = Cv2.ImDecode(img_bytes, ImreadModes.Color); + // return mat; + //} + } +} diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/FaceAI/OrbeCamera.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/FaceAI/OrbeCamera.cs" new file mode 100644 index 0000000..2ff1dd2 --- /dev/null +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/FaceAI/OrbeCamera.cs" @@ -0,0 +1,29 @@ +锘縰sing System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.InteropServices; +using System.Text; +using System.Threading.Tasks; + +// 閫傞厤濂ユ瘮涓厜闀滃ご +namespace FaceAI +{ + class OrbeCamera + { + // 鑾峰彇orbeCamera瀵硅薄 濂ユ瘮涓厜娴风嚂绛変紬澶氬ゥ姣旈暅澶� + [DllImport("OrbeCamera.dll", EntryPoint = "new_orbe", CharSet = CharSet.Ansi + , CallingConvention = CallingConvention.Cdecl)] + public static extern IntPtr new_orbe(); + + // 鎵撳紑濂ユ瘮涓厜 + [DllImport("OrbeCamera.dll", EntryPoint = "open_orbe", CharSet = CharSet.Ansi + , CallingConvention = CallingConvention.Cdecl)] + public static extern int open_orbe(IntPtr porbe, IntPtr cv_rgb, IntPtr cv_depth); + + // 閲婃斁濂ユ瘮涓厜 + [DllImport("OrbeCamera.dll", EntryPoint = "orbe_release", CharSet = CharSet.Ansi + , CallingConvention = CallingConvention.Cdecl)] + public static extern void orbe_release(IntPtr orbe); + + } +} diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/FaceAI/TimeUtil.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/FaceAI/TimeUtil.cs" new file mode 100644 index 0000000..8459a0f --- /dev/null +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/FaceAI/TimeUtil.cs" @@ -0,0 +1,17 @@ +锘縰sing System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FaceAI +{ + class TimeUtil + { + public static long get_time_stamp() + { + TimeSpan ts = DateTime.Now.ToUniversalTime() - new DateTime(1970, 1, 1); + return (long)ts.TotalMilliseconds; + } + } +} diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/WIDESEAWCS_Common.csproj" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/WIDESEAWCS_Common.csproj" index dcc8804..52b071d 100644 --- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/WIDESEAWCS_Common.csproj" +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/WIDESEAWCS_Common.csproj" @@ -7,8 +7,15 @@ </PropertyGroup> <ItemGroup> + <PackageReference Include="Baidu.AI" Version="4.15.16" /> <PackageReference Include="Newtonsoft.Json" Version="13.0.3" /> <PackageReference Include="NLog" Version="5.4.0" /> </ItemGroup> + <ItemGroup> + <Reference Include="OpenCvSharp"> + <HintPath>bin\Release\face-resource\x86\OpenCvSharp.dll</HintPath> + </Reference> + </ItemGroup> + </Project> diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_ISystemServices/ISys_UserService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_ISystemServices/ISys_UserService.cs" index f337f41..af87416 100644 --- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_ISystemServices/ISys_UserService.cs" +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_ISystemServices/ISys_UserService.cs" @@ -76,7 +76,7 @@ WebResponseContent DeleteUserIsface(string account); - + string FaceCompareFeature(string file1, string file2); } } diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/System/Sys_UserController.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/System/Sys_UserController.cs" index 30be21b..8392d65 100644 --- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/System/Sys_UserController.cs" +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/System/Sys_UserController.cs" @@ -30,6 +30,13 @@ { _httpContextAccessor = httpContextAccessor; } + [HttpPost, Route("FaceCompareFeature"), AllowAnonymous] + public WebResponseContent FaceCompareFeature(string file1, string file2) + { + var score = Service.FaceCompareFeature(file1, file2); + return WebResponseContent.Instance.OK(data: "data:" + score); + } + [HttpPost, Route("swgLogin"), AllowAnonymous] public dynamic SwgLogin([FromBody] SwaggerLoginRequest loginRequest) { diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Program.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Program.cs" index 6383e4d..19610a3 100644 --- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Program.cs" +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Program.cs" @@ -24,6 +24,7 @@ using WIDESEAWCS_Server.HostedService; using WIDESEAWCS_Server.Filter; using WIDESEAWCS_Tasks.OHT; +using Baidu.Aip.Face; var builder = WebApplication.CreateBuilder(args); @@ -115,7 +116,7 @@ app.UseApplicationSetup();//启动配置 app.UseAllServicesMiddle(builder.Services); - +FaceAI.Face.Main(); app.UseSession(); //if (app.Environment.IsDevelopment()) { diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/WIDESEAWCS_Server.csproj" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/WIDESEAWCS_Server.csproj" index 9e8131c..4aa8db2 100644 --- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/WIDESEAWCS_Server.csproj" +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/WIDESEAWCS_Server.csproj" @@ -67,6 +67,7 @@ </ItemGroup> <ItemGroup> + <ProjectReference Include="..\WIDESEAWCS_Common\WIDESEAWCS_Common.csproj" /> <ProjectReference Include="..\WIDESEAWCS_SystemServices\WIDESEAWCS_SystemServices.csproj" /> <ProjectReference Include="..\WIDESEAWCs_TaskInfoService\WIDESEAWCs_TaskInfoService.csproj" /> <ProjectReference Include="..\WIDESEAWCS_Tasks\WIDESEAWCS_Tasks.csproj" /> diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/appsettings.json" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/appsettings.json" index ce1a829..acd0c8b 100644 --- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/appsettings.json" +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/appsettings.json" @@ -17,7 +17,7 @@ //5.PostgreSQL "DBType": "SqlServer", //杩炴帴瀛楃涓� - "ConnectionString": "Data Source=.;Initial Catalog=WIDESEAWCS_MXSSG;User ID=sa;Password=123456;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False", + "ConnectionString": "Data Source=.;Initial Catalog=WIDESEAWCS_MXSSG;User ID=sa;Password=sa123456;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False", @@ -34,7 +34,7 @@ "ExpMinutes": 120, "QuartzJobAutoStart": true, "LogDeubgEnable": true, //鏄惁璁板綍璋冭瘯鏃ュ織 - "PrintSql": true, //鎵撳嵃SQL璇彞 + "PrintSql": false, //鎵撳嵃SQL璇彞 "LogAOPEnable": true, //鏄惁璁板綍AOP鏃ュ織 "WebSocketEnable": true, "WebSocketPort": 9260 diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_SystemServices/Sys_UserService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_SystemServices/Sys_UserService.cs" index 9a6cab0..2fabccf 100644 --- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_SystemServices/Sys_UserService.cs" +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_SystemServices/Sys_UserService.cs" @@ -14,6 +14,7 @@ using Microsoft.AspNetCore.Http; using Newtonsoft.Json; using WIDESEAWCS_Common; +using FaceAI; namespace WIDESEAWCS_SystemServices { @@ -129,6 +130,9 @@ } var faceResult = BaiDuFaceHelper.FaceSearch(loginInfo.path, groupId); + + + if (faceResult != null && faceResult.error_code == 0) { var bestMatch = faceResult.result.user_list.OrderByDescending(u => u.score).FirstOrDefault(); @@ -230,6 +234,53 @@ return content; } + /// <summary> + /// 1:N 浜鸿劯鎼滅储鎺ュ彛 + /// </summary> + /// <param name="image">鍥剧墖淇℃伅(**鎬绘暟鎹ぇ灏忓簲灏忎簬10M**)锛屽浘鐗囦笂浼犳柟寮忔牴鎹甶mage_type鏉ュ垽鏂�</param> + /// <param name="imageType">鍥剧墖绫诲瀷 <br> **BASE64**:鍥剧墖鐨刡ase64鍊硷紝base64缂栫爜鍚庣殑鍥剧墖鏁版嵁锛岀紪鐮佸悗鐨勫浘鐗囧ぇ灏忎笉瓒呰繃2M锛� <br>**URL**:鍥剧墖鐨� URL鍦板潃( 鍙兘鐢变簬缃戠粶绛夊師鍥犲鑷翠笅杞藉浘鐗囨椂闂磋繃闀�)锛� <br>**FACE_TOKEN**: 浜鸿劯鍥剧墖鐨勫敮涓�鏍囪瘑锛岃皟鐢ㄤ汉鑴告娴嬫帴鍙f椂锛屼細涓烘瘡涓汉鑴稿浘鐗囪祴浜堜竴涓敮涓�鐨凢ACE_TOKEN锛屽悓涓�寮犲浘鐗囧娆℃娴嬪緱鍒扮殑FACE_TOKEN鏄悓涓�涓��</param> + /// <param name="groupIdList">浠庢寚瀹氱殑group涓繘琛屾煡鎵� 鐢ㄩ�楀彿鍒嗛殧锛�**涓婇檺20涓�**</param> + /// </param> + /// <return>JObject</return> + /// + public string FaceSearch(string image, string imageType, string groupIdList, string userId) + { + string result = ""; + switch (imageType) + { + case "base64": + //result = FaceCompare.FaceIdentifyByBuffer(image, groupIdList, userId); + break; + case "url": + result = FaceCompare.FaceIdentify(image, groupIdList, userId); + break; + case "token": + result = FaceCompare.FaceIdentifyByFeature(image, groupIdList, userId); + break; + default: + break; + } + return result; + } + + /// <summary> + /// 閫氳繃鐗瑰緛鍊兼瘮瀵癸紙1:1锛� 瀵逛汉鑴哥壒寰佸�艰繘琛屾瘮杈冿紝鍙繑鍥炰汉鑴哥壒寰佺浉浼煎垎鍊硷紙鐧惧垎鍒讹級 + /// </summary> + /// <param name="file1">浼犲浘鐗囪矾寰�</param> + /// <param name="file2">浼犲浘鐗囪矾寰�</param> + /// <returns></returns> + public string FaceCompareFeature(string file1, string file2) + { + try + { + string result = FaceCompare.FaceCompareFeature(file1, file2); + return result; + } + catch (Exception e) + { + throw e; + } + } public override WebResponseContent UpdateData(SaveModel saveModel) { UpdateIgnoreColOnExecute = x => diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_TelescopicService/WIDESEAWCS_TelescopicService.csproj" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_TelescopicService/WIDESEAWCS_TelescopicService.csproj" index 753e0d0..98fd7bc 100644 --- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_TelescopicService/WIDESEAWCS_TelescopicService.csproj" +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_TelescopicService/WIDESEAWCS_TelescopicService.csproj" @@ -7,6 +7,7 @@ </PropertyGroup> <ItemGroup> + <ProjectReference Include="..\WIDESEAWCS_Common\WIDESEAWCS_Common.csproj" /> <ProjectReference Include="..\WIDESEAWCS_ITelescopicService\WIDESEAWCS_ITelescopicService.csproj" /> </ItemGroup> -- Gitblit v1.9.3