# opencv_demo **Repository Path**: gaoxingqufuhchao/opencv_demo ## Basic Information - **Project Name**: opencv_demo - **Description**: 人脸向量录入,检测示例,监控目标监控等等案例 - **Primary Language**: Python - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-11-10 - **Last Updated**: 2024-04-13 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # opencv_demo #### IMEI生成位置 09_audio_spirit/imei_build.py #### 介绍 人脸向量录入,检测示例,监控目标监控等等案例 #### 软件架构 软件架构说明 01. face_capture: 人脸检测安防 #### 环境准备 absl-py 2.0.0 attrs 23.1.0 av 11.0.0 ca-certificates 2023.08.22 cachetools 5.3.2 certifi 2023.11.17 cffi 1.16.0 charset-normalizer 3.3.2 colorama 0.4.6 contourpy 1.1.1 cvzone 1.6.1 cycler 0.12.1 dlib 19.24.2 ffmpeg 1.4 filelock 3.13.1 flatbuffers 23.5.26 fonttools 4.44.3 fsspec 2023.12.1 fvcore 0.1.5.post20221221 gitdb 4.0.11 gitpython 3.1.40 google-auth 2.25.2 google-auth-oauthlib 1.0.0 grpcio 1.60.0 idna 3.6 imageio 2.33.1 importlib-metadata 7.0.0 importlib-resources 6.1.1 iopath 0.1.10 jinja2 3.1.2 kiwisolver 1.4.5 lazy-loader 0.3 libffi 3.4.4 markdown 3.5.1 markupsafe 2.1.3 matplotlib 3.7.3 mediapipe 0.10.8 mpmath 1.3.0 mss 9.0.1 natsort 8.4.0 networkx 3.1 numpy 1.24.4 oauthlib 3.2.2 opencv-contrib-python 4.8.1.78 opencv-python 4.8.1.78 openssl 3.0.12 packaging 23.2 pandas 2.0.3 parameterized 0.9.0 pillow 10.1.0 pip 23.3 portalocker 2.8.2 protobuf 3.20.3 psutil 5.9.7 py-cpuinfo 9.0.0 pyasn1 0.5.1 pyasn1-modules 0.3.0 pyaudio 0.2.14 pycparser 2.21 pydirectinput 1.0.4 pydub 0.25.1 pykalman 0.9.5 pynput 1.7.6 pyparsing 3.1.1 pyqtgraph 0.13.3 pyside2 5.15.2.1 python 3.8.18 python-dateutil 2.8.2 pytorchvideo 0.1.5 pytz 2023.3.post1 pywavelets 1.4.1 pywin32 306 pyyaml 6.0.1 requests 2.31.0 requests-oauthlib 1.3.1 rsa 4.9 scikit-image 0.21.0 scipy 1.10.1 seaborn 0.13.0 setuptools 68.0.0 shiboken2 5.15.2.1 six 1.16.0 smmap 5.0.1 sounddevice 0.4.6 sqlite 3.41.2 sympy 1.12 tabulate 0.9.0 tensorboard 2.14.0 tensorboard-data-server 0.7.2 termcolor 2.4.0 thop 0.1.1-2209072238 tifffile 2023.7.10 torch 1.12.1+cu113 torchvision 0.13.1+cu113 tqdm 4.66.1 typing-extensions 4.9.0 tzdata 2023.3 ultralytics 8.0.229 urllib3 2.1.0 vc 14.2 vs2015_runtime 14.27.29016 werkzeug 3.0.1 wheel 0.41.2 yacs 0.1.8 yaml 0.2.5 zipp 3.17.0 #### 依赖安装 1. python 3.8 2. opencv-python 4.8.1 3. dlib 19.24.2 4. CUDA环境 #### 使用说明 1. pip 镜像包 https://pypi.tuna.tsinghua.edu.cn/simple #### 常见问题 1. 项目01中对人脸进行128特征向量提取报错: Could not locate zlibwapi.dll. Please make sure it is in your library path! ​ 解决方法,将根目录下的zlib123dllx64文件解压后。zlibwapi.lib文件放到之前CUDA安装位置的lib中,zlibwapi.dll文件放到CUDA安装位置的bin中 #### 向量的计算方式 数据库储存128D的向量,根据欧式距离可算出两两向量的距离,距离越小越相似,但是数据库里存储向量,根据指定向量查出最相似的向量方式如下。 0. 欧式距离公式 ![](https://img-blog.csdnimg.cn/20210402203539984.png) 1. 表结构 ```` CREATE TABLE `face_data` ( `face_id` bigint(20) NOT NULL COMMENT '编号', `face_name` varchar(255) COLLATE utf8_unicode_ci NOT NULL COMMENT '人脸名称', `feature_vector` varchar(10240) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '特征向量', `update_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `create_time` datetime DEFAULT NULL COMMENT '创建时间', `data_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '数据主键', PRIMARY KEY (`data_id`) USING BTREE ) ENGINE=MyISAM AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci ROW_FORMAT=DYNAMIC; ```` 2. 创建自定义函数(欧氏距离计算函数) ```` CREATE DEFINER=`root`@`localhost` FUNCTION `euclidean_distance`(vector1 VARCHAR(128), vector2 VARCHAR(128)) RETURNS float DETERMINISTIC BEGIN DECLARE len1 INT; DECLARE len2 INT; DECLARE i INT default 1; DECLARE sum FLOAT; SET len1 = LENGTH(vector1); SET len2 = LENGTH(vector2); SET sum = 0; while i<129 do SET sum = sum + POW(SUBSTRING_INDEX(SUBSTRING_INDEX(vector1, ',', i), ',', -1) - SUBSTRING_INDEX(SUBSTRING_INDEX(vector2, ',', i), ',', -1), 2); SET i = i + 1; END while; RETURN SQRT(sum); END ```` 3. 测试计算两个2维向量点的距离 ```` select euclidean_distance("-0.0781729444861412,0.110044464468956", "-0.12611718475818634,0.13194166123867035") ```` 4. 查询指定向量最相似的前5条 ```` SELECT face_id, euclidean_distance('-0.0781729444861412,0.110044464468956,0.06956595182418823,-0.04195471480488777,-0.13797412812709808,-0.01051325537264347,-0.08628914505243301,-0.17037545144557953,0.10026334226131439,-0.12803488969802856,0.23731382191181183,-0.094626285135746,-0.196399986743927,-0.06725674867630005,-0.08001142740249634,0.15153078734874725,-0.14427754282951355,-0.18382087349891663,-0.05251418426632881,-0.031287774443626404,0.1022581234574318,0.0790780633687973,0.008861299604177475,0.020882003009319305,-0.06397232413291931,-0.2706142067909241,-0.107462577521801,-0.03476380184292793,0.043968893587589264,-0.05694590508937836,-0.06642886996269226,0.04123011231422424,-0.18131156265735626,-0.03576948121190071,0.04664576053619385,0.1326863318681717,0.003225848078727722,-0.047573719173669815,0.1651453822851181,-0.029888691380620003,-0.21578450500965118,0.08537548780441284,0.0766519159078598,0.2540043294429779,0.22466638684272766,0.06360028684139252,-0.019438330084085464,-0.1689058244228363,0.043127596378326416,-0.11864039301872253,0.15812252461910248,0.19117693603038788,0.09921862185001373,0.05779439955949783,0.020246407017111778,-0.15069229900836945,-0.029495960101485252,0.1517685353755951,-0.09771490097045898,0.055743880569934845,0.18273179233074188,-0.05583849176764488,0.004194958135485649,-0.11965519189834595,0.17633725702762604,0.07909074425697327,-0.09237003326416016,-0.22499722242355347,0.13512863218784332,-0.16307398676872253,-0.16911545395851135,0.07714464515447617,-0.16546982526779175,-0.1413039118051529,-0.266265332698822,0.022507959976792336,0.4201160669326782,0.12732553482055664,-0.2231403887271881,0.036990948021411896,0.010170978493988514,-0.00629305187612772,0.1687457412481308,0.10473113507032394,0.00399409607052803,-0.013406611979007721,-0.12538184225559235,0.005433365702629089,0.2502303421497345,-0.02349778823554516,-0.07866109907627106,0.21128004789352417,0.0021615102887153625,-0.0009294161573052406,0.06593659520149231,0.031842511147260666,0.008746307343244553,0.05120106786489487,-0.19502216577529907,-0.037121932953596115,-0.027497289702296257,-0.0628679022192955,-0.06642049551010132,0.09603795409202576,-0.10845164209604263,0.13225442171096802,0.005377473309636116,0.04529388248920441,-0.05451689288020134,-0.038580723106861115,-0.12509524822235107,0.016826599836349487,0.20309969782829285,-0.22045192122459412,0.2263873666524887,0.12779565155506134,0.118931345641613,0.12429559975862503,0.16083121299743652,0.15235833823680878,0.04558601975440979,-0.07488320767879486,-0.21370939910411835,-0.07309035211801529,0.0741523876786232,-0.013888441026210785,0.16118189692497253,0.10571793466806412', feature_vector) AS distance from face_data order by distance asc limit 5 ```` ###向量数据库 1. Milvus 2. Elasticsearch ###解决C盘不足问题 1. 创建目录软链接 1).比如将系统盘某文件夹直接剪切到其他盘符,然后打开cmd输入下面命令 mklink /j "D:\1setsoft\test_temp" "E:\2setsoft\4other\test_temp" 这样就完成D盘目录链接到E盘,在执行命令前,D盘的test_temp一定不存在, E盘存在,执行后自动创建D盘的test_temp文件夹 ####公众号交流 ![](https://oscimg.oschina.net/oscnet/up-30692a670435bf67bafe1806440931eca7e.JPEG)