ZMES Install Feat GPU Support Ubuntu 20.04 - Solved Guide Within
Re: Looking for a zmes installation Feat GPU support
Started last night from scratch again. I used the guide with some modifications. I used compiled opencv and dlib with cudnn v8 and used cuda 10.1 as provided with ubuntu 20.04 repos. I have not yet configured face recognition... I have a few more hrs before I have to head off to work. I will give it a go before I head off to work. Here are the results:
Code: Select all
sudo -u www-data /var/lib/zmeventnotification/bin/zm_detect.py --config /etc/zm/objectconfig.ini --debug --eventid 2 --monitorid 5 --eventpath=/tmp
06/08/22 11:13:13 zmesdetect_m5[94441] INF ZMLog.py:292 [Setting up signal handler for logs]
06/08/22 11:13:13 zmesdetect_m5[94441] INF ZMLog.py:301 [Switching global logger to ZMLog]
06/08/22 11:13:13 zmesdetect_m5[94441] INF zm_detect.py:284 [---------| app:6.1.28, pyzm:0.3.56, ES:6.1.28
, OpenCV:4.5.5|------------]
06/08/22 11:13:13 zmesdetect_m5[94441] INF utils.py:405 [Reading config from: /etc/zm/objectconfig.ini]
06/08/22 11:13:13 zmesdetect_m5[94441] INF utils.py:410 [Reading secrets from: /etc/zm/secrets.ini]
06/08/22 11:13:13 zmesdetect_m5[94441] DBG2 utils.py:382 [Secret token found in config: !ZM_PORTAL]
06/08/22 11:13:13 zmesdetect_m5[94441] DBG2 utils.py:382 [Secret token found in config: !ZM_USER]
06/08/22 11:13:13 zmesdetect_m5[94441] DBG2 utils.py:382 [Secret token found in config: !ZM_PASSWORD]
06/08/22 11:13:13 zmesdetect_m5[94441] DBG2 utils.py:382 [Secret token found in config: !ZM_API_PORTAL]
06/08/22 11:13:13 zmesdetect_m5[94441] DBG2 utils.py:382 [Secret token found in config: !ML_USER]
06/08/22 11:13:13 zmesdetect_m5[94441] DBG2 utils.py:382 [Secret token found in config: !ML_PASSWORD]
06/08/22 11:13:13 zmesdetect_m5[94441] DBG2 utils.py:382 [Secret token found in config: !PLATEREC_ALPR_KEY]
06/08/22 11:13:13 zmesdetect_m5[94441] DBG1 utils.py:445 [allowing self-signed certs to work...]
06/08/22 11:13:13 zmesdetect_m5[94441] DBG2 utils.py:455 [Now checking for monitor overrides]
06/08/22 11:13:13 zmesdetect_m5[94441] DBG3 utils.py:522 [Finally, doing parameter substitution]
06/08/22 11:13:13 zmesdetect_m5[94441] INF zm_detect.py:309 [Importing local classes for Object/Face]
06/08/22 11:13:14 zmesdetect_m5[94441] INF zm_detect.py:334 [Connecting with ZM APIs]
06/08/22 11:13:14 zmesdetect_m5[94441] DBG2 api.py:72 [API SSL certificate check has been disbled]
06/08/22 11:13:14 zmesdetect_m5[94441] DBG1 api.py:181 [using username/password for login]
06/08/22 11:13:14 zmesdetect_m5[94441] DBG2 api.py:210 [Using new token API]
06/08/22 11:13:14 zmesdetect_m5[94441] DBG1 api.py:217 [Access token expires on:2022-06-08 13:13:14.429674 [7200s]]
06/08/22 11:13:14 zmesdetect_m5[94441] DBG1 api.py:221 [Refresh token expires on:2022-06-09 11:13:14.430473 [86400s]]
06/08/22 11:13:14 zmesdetect_m5[94441] DBG2 zm_detect.py:342 [using ml_sequence]
06/08/22 11:13:14 zmesdetect_m5[94441] DBG2 zm_detect.py:354 [using stream_sequence]
06/08/22 11:13:14 zmesdetect_m5[94441] DBG1 detect_sequence.py:160 [Resetting models, will be loaded on next run]
06/08/22 11:13:14 zmesdetect_m5[94441] DBG3 detect_sequence.py:634 [Using automatic locking as we are switching between models]
06/08/22 11:13:14 zmesdetect_m5[94441] DBG2 Media.py:51 [Media get SSL certificate check has been disbled]
06/08/22 11:13:14 zmesdetect_m5[94441] DBG2 Media.py:99 [Using URL 2 for stream]
06/08/22 11:13:14 zmesdetect_m5[94441] DBG2 Media.py:114 [We will only process frames: ['snapshot', 'alarm']]
06/08/22 11:13:14 zmesdetect_m5[94441] DBG2 Media.py:137 [No need to start streams, we are picking images from https://192.168.0.9/zm/index.php?view=image&eid=2]
06/08/22 11:13:14 zmesdetect_m5[94441] DBG3 Media.py:271 [Reading https://192.168.0.9/zm/index.php?view=image&eid=2&fid=snapshot]
06/08/22 11:13:14 zmesdetect_m5[94441] DBG3 api.py:144 [No need to relogin as access token still has 119.99980951666666 minutes remaining]
06/08/22 11:13:14 zmesdetect_m5[94441] DBG3 api.py:272 [make_request called with url=https://192.168.0.9/zm/index.php?view=image&eid=2&fid=snapshot payload={} type=get query={'token': 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJab25lTWluZGVyIiwiaWF0IjoxNjU0NzA4Mzk0LCJleHAiOjE2NTQ3MTU1OTQsInVzZXIiOiJaTUVTIiwidHlwZSI6ImFjY2VzcyJ9.Jbcgnh-zZSTWUopIj6NE__G0Qotkn451tUGLULMryR4'}]
06/08/22 11:13:14 zmesdetect_m5[94441] DBG1 detect_sequence.py:654 [perf: Starting for frame:snapshot]
06/08/22 11:13:14 zmesdetect_m5[94441] DBG1 detect_sequence.py:664 [Sequence of detection types to execute: ['object', 'face', 'alpr']]
06/08/22 11:13:14 zmesdetect_m5[94441] DBG1 detect_sequence.py:669 [============ Frame: snapshot Running object detection type in sequence ==================]
06/08/22 11:13:14 zmesdetect_m5[94441] DBG2 detect_sequence.py:174 [Skipping TPU object detection as it is disabled]
06/08/22 11:13:14 zmesdetect_m5[94441] DBG2 detect_sequence.py:178 [Loading sequence: YoloV4 GPU/CPU]
06/08/22 11:13:14 zmesdetect_m5[94441] DBG2 detect_sequence.py:179 [Initializing model type:object with options:{'name': 'YoloV4 GPU/CPU', 'enabled': 'yes', 'object_config': '/var/lib/zmeventnotification/models/yolov4/yolov4.cfg', 'object_weights': '/var/lib/zmeventnotification/models/yolov4/yolov4.weights', 'object_labels': '/var/lib/zmeventnotification/models/yolov4/coco.names', 'object_min_confidence': 0.3, 'object_framework': 'opencv', 'object_processor': 'gpu', 'gpu_max_processes': 1, 'gpu_max_lock_wait': 100, 'cpu_max_processes': 3, 'cpu_max_lock_wait': 100, 'max_detection_size': '90%', 'disable_locks': 'no'}]
06/08/22 11:13:14 zmesdetect_m5[94441] DBG2 yolo.py:38 [portalock: max:1, name:pyzm_uid33_gpu_lock, timeout:100]
06/08/22 11:13:14 zmesdetect_m5[94441] DBG3 detect_sequence.py:689 [object has a same_model_sequence strategy of first]
06/08/22 11:13:14 zmesdetect_m5[94441] DBG1 detect_sequence.py:701 [--------- Frame:snapshot Running variation: #1 -------------]
06/08/22 11:13:14 zmesdetect_m5[94441] DBG2 yolo.py:136 [detect extracted image dimensions as: 800wx450h]
06/08/22 11:13:14 zmesdetect_m5[94441] DBG2 yolo.py:50 [Waiting for pyzm_uid33_gpu_lock portalock...]
06/08/22 11:13:14 zmesdetect_m5[94441] DBG2 yolo.py:52 [Got pyzm_uid33_gpu_lock portalock]
06/08/22 11:13:14 zmesdetect_m5[94441] DBG1 yolo.py:85 [|--------- Loading "YoloV4 GPU/CPU" model from disk -------------|]
06/08/22 11:13:14 zmesdetect_m5[94441] DBG1 yolo.py:98 [You are using OpenCV >= 4.5.4, making sure we fix getUnconnectedOutLayers() API]
06/08/22 11:13:14 zmesdetect_m5[94441] DBG1 yolo.py:100 [perf: processor:gpu Yolo initialization (loading /var/lib/zmeventnotification/models/yolov4/yolov4.weights model from disk) took: 126.17 ms]
06/08/22 11:13:14 zmesdetect_m5[94441] DBG2 yolo.py:115 [Setting CUDA backend for OpenCV]
06/08/22 11:13:14 zmesdetect_m5[94441] DBG3 yolo.py:116 [If you did not set your CUDA_ARCH_BIN correctly during OpenCV compilation, you will get errors during detection related to invalid device/make_policy]
06/08/22 11:13:14 zmesdetect_m5[94441] DBG1 yolo.py:160 [|---------- YOLO (input image: 800w*450h, model resize dimensions: 416w*416h) ----------|]
06/08/22 11:13:16 zmesdetect_m5[94441] DBG2 yolo.py:68 [Released pyzm_uid33_gpu_lock portalock]
06/08/22 11:13:16 zmesdetect_m5[94441] DBG1 yolo.py:185 [perf: processor:gpu Yolo detection took: 1568.19 ms]
06/08/22 11:13:16 zmesdetect_m5[94441] DBG2 yolo.py:220 [perf: processor:gpu Yolo NMS filtering took: 1.10 ms]
06/08/22 11:13:16 zmesdetect_m5[94441] DBG2 object.py:66 [core model detection over, got 6 objects. Now filtering]
06/08/22 11:13:16 zmesdetect_m5[94441] DBG2 object.py:70 [Max object size found to be: 90%]
06/08/22 11:13:16 zmesdetect_m5[94441] DBG2 object.py:78 [Converted 90% to 324000.0]
06/08/22 11:13:16 zmesdetect_m5[94441] DBG2 object.py:103 [Returning filtered list of 6 objects.]
06/08/22 11:13:16 zmesdetect_m5[94441] DBG2 detect_sequence.py:711 [This model iteration inside object found: labels: ['car', 'truck', 'car', 'car', 'person', 'car'],conf:[0.9954595565795898, 0.9149943590164185, 0.8078308701515198, 0.7353916764259338, 0.6761721968650818, 0.4781055450439453]]
06/08/22 11:13:16 zmesdetect_m5[94441] DBG2 detect_sequence.py:424 [Max object size found to be: 90%]
06/08/22 11:13:16 zmesdetect_m5[94441] DBG2 detect_sequence.py:432 [Converted 90% to 324000.0]
06/08/22 11:13:16 zmesdetect_m5[94441] DBG2 detect_sequence.py:448 [No polygons, adding full image polygon: {'name': 'full_image', 'value': [(0, 0), (1920, 0), (1920, 1080), (0, 1080)], 'pattern': None}]
06/08/22 11:13:16 zmesdetect_m5[94441] DBG3 detect_sequence.py:228 [resized polygons x=0.4166666666666667/y=0.4166666666666667: [{'name': 'full_image', 'value': [(0, 0), (800, 0), (800, 450), (0, 450)], 'pattern': None}]]
06/08/22 11:13:16 zmesdetect_m5[94441] DBG2 detect_sequence.py:502 [intersection: object:car,POLYGON ((200 90, 356 90, 356 168, 200 168, 200 90)) intersects polygon:full_image,POLYGON ((0 0, 800 0, 800 450, 0 450, 0 0))]
06/08/22 11:13:16 zmesdetect_m5[94441] DBG2 detect_sequence.py:518 [Using global match pattern: (person|car|motorbike|bus|truck|boat)]
06/08/22 11:13:16 zmesdetect_m5[94441] DBG2 detect_sequence.py:526 [full_image intersects object:car[[(200, 90), (356, 90), (356, 168), (200, 168)]]]
06/08/22 11:13:16 zmesdetect_m5[94441] DBG2 detect_sequence.py:502 [intersection: object:truck,POLYGON ((1 106, 175 106, 175 208, 1 208, 1 106)) intersects polygon:full_image,POLYGON ((0 0, 800 0, 800 450, 0 450, 0 0))]
06/08/22 11:13:16 zmesdetect_m5[94441] DBG2 detect_sequence.py:518 [Using global match pattern: (person|car|motorbike|bus|truck|boat)]
06/08/22 11:13:16 zmesdetect_m5[94441] DBG2 detect_sequence.py:526 [full_image intersects object:truck[[(1, 106), (175, 106), (175, 208), (1, 208)]]]
06/08/22 11:13:16 zmesdetect_m5[94441] DBG2 detect_sequence.py:502 [intersection: object:car,POLYGON ((46 56, 108 56, 108 102, 46 102, 46 56)) intersects polygon:full_image,POLYGON ((0 0, 800 0, 800 450, 0 450, 0 0))]
06/08/22 11:13:16 zmesdetect_m5[94441] DBG2 detect_sequence.py:518 [Using global match pattern: (person|car|motorbike|bus|truck|boat)]
06/08/22 11:13:16 zmesdetect_m5[94441] DBG2 detect_sequence.py:526 [full_image intersects object:car[[(46, 56), (108, 56), (108, 102), (46, 102)]]]
06/08/22 11:13:16 zmesdetect_m5[94441] DBG2 detect_sequence.py:502 [intersection: object:car,POLYGON ((676 74, 710 74, 710 94, 676 94, 676 74)) intersects polygon:full_image,POLYGON ((0 0, 800 0, 800 450, 0 450, 0 0))]
06/08/22 11:13:16 zmesdetect_m5[94441] DBG2 detect_sequence.py:518 [Using global match pattern: (person|car|motorbike|bus|truck|boat)]
06/08/22 11:13:16 zmesdetect_m5[94441] DBG2 detect_sequence.py:526 [full_image intersects object:car[[(676, 74), (710, 74), (710, 94), (676, 94)]]]
06/08/22 11:13:16 zmesdetect_m5[94441] DBG2 detect_sequence.py:502 [intersection: object:person,POLYGON ((697 139, 767 139, 767 281, 697 281, 697 139)) intersects polygon:full_image,POLYGON ((0 0, 800 0, 800 450, 0 450, 0 0))]
06/08/22 11:13:16 zmesdetect_m5[94441] DBG2 detect_sequence.py:518 [Using global match pattern: (person|car|motorbike|bus|truck|boat)]
06/08/22 11:13:16 zmesdetect_m5[94441] DBG2 detect_sequence.py:526 [full_image intersects object:person[[(697, 139), (767, 139), (767, 281), (697, 281)]]]
06/08/22 11:13:16 zmesdetect_m5[94441] DBG2 detect_sequence.py:502 [intersection: object:car,POLYGON ((-1 58, 43 58, 43 108, -1 108, -1 58)) intersects polygon:full_image,POLYGON ((0 0, 800 0, 800 450, 0 450, 0 0))]
06/08/22 11:13:16 zmesdetect_m5[94441] DBG2 detect_sequence.py:518 [Using global match pattern: (person|car|motorbike|bus|truck|boat)]
06/08/22 11:13:16 zmesdetect_m5[94441] DBG2 detect_sequence.py:526 [full_image intersects object:car[[(-1, 58), (43, 58), (43, 108), (-1, 108)]]]
06/08/22 11:13:16 zmesdetect_m5[94441] DBG2 detect_sequence.py:753 [breaking out of same model loop, as matches found and strategy is "first"]
06/08/22 11:13:16 zmesdetect_m5[94441] DBG1 detect_sequence.py:669 [============ Frame: snapshot Running face detection type in sequence ==================]
06/08/22 11:13:16 zmesdetect_m5[94441] DBG2 detect_sequence.py:190 [Skipping TPU face detection as it is disabled]
/usr/local/lib/python3.8/dist-packages/numpy/core/getlimits.py:499: UserWarning: The value of the smallest subnormal for <class 'numpy.float64'> type is zero.
setattr(self, word, getattr(machar, word).flat[0])
/usr/local/lib/python3.8/dist-packages/numpy/core/getlimits.py:89: UserWarning: The value of the smallest subnormal for <class 'numpy.float64'> type is zero.
return self._float_to_str(self.smallest_subnormal)
/usr/local/lib/python3.8/dist-packages/numpy/core/getlimits.py:499: UserWarning: The value of the smallest subnormal for <class 'numpy.float32'> type is zero.
setattr(self, word, getattr(machar, word).flat[0])
/usr/local/lib/python3.8/dist-packages/numpy/core/getlimits.py:89: UserWarning: The value of the smallest subnormal for <class 'numpy.float32'> type is zero.
return self._float_to_str(self.smallest_subnormal)
06/08/22 11:13:19 zmesdetect_m5[94441] DBG1 face_dlib.py:42 [perf: processor:gpu Face Recognition library load time took: 0.00 ms ]
06/08/22 11:13:19 zmesdetect_m5[94441] DBG1 face_dlib.py:50 [Initializing face recognition with model:cnn upsample:1, jitters:0]
06/08/22 11:13:19 zmesdetect_m5[94441] DBG2 face_dlib.py:73 [portalock: max:1, name:pyzm_uid33_gpu_lock, timeout:100]
06/08/22 11:13:19 zmesdetect_m5[94441] DBG1 face_dlib.py:97 [trained file not found, reading from images and doing training...]
06/08/22 11:13:19 zmesdetect_m5[94441] DBG1 face_dlib.py:100 [If you are using a GPU and run out of memory, do the training using zm_train_faces.py. In this case, other models like yolo may already take up a lot of GPU memory]
06/08/22 11:13:19 zmesdetect_m5[94441] ERR face_train_dlib.py:135 [No known faces found to train, encoding file not created]
06/08/22 11:13:19 zmesdetect_m5[94441] DBG1 face_train_dlib.py:152 [perf: Face Recognition training took: 36.25 ms]
06/08/22 11:13:19 zmesdetect_m5[94441] ERR face_dlib.py:110 [Error loading KNN model: [Errno 2] No such file or directory: '/var/lib/zmeventnotification/known_faces/faces.dat']
06/08/22 11:13:19 zmesdetect_m5[94441] DBG3 detect_sequence.py:689 [face has a same_model_sequence strategy of union]
06/08/22 11:13:19 zmesdetect_m5[94441] DBG1 detect_sequence.py:701 [--------- Frame:snapshot Running variation: #1 -------------]
06/08/22 11:13:19 zmesdetect_m5[94441] DBG1 face_dlib.py:164 [|---------- Dlib Face recognition (input image: 800w*450h) ----------|]
06/08/22 11:13:19 zmesdetect_m5[94441] DBG3 face_dlib.py:174 [Face options={'name': 'DLIB based face recognition', 'enabled': 'yes', 'save_unknown_faces': 'yes', 'save_unknown_faces_leeway_pixels': 100, 'face_detection_framework': 'dlib', 'known_images_path': '/var/lib/zmeventnotification/known_faces', 'unknown_images_path': '/var/lib/zmeventnotification/unknown_faces', 'face_model': 'cnn', 'face_train_model': 'cnn', 'face_recog_dist_threshold': '0.6', 'face_num_jitters': '1', 'face_upsample_times': '1', 'gpu_max_processes': 1, 'gpu_max_lock_wait': 100, 'cpu_max_processes': 3, 'cpu_max_lock_wait': 100, 'max_size': 800, 'disable_locks': 'no'}]
06/08/22 11:13:19 zmesdetect_m5[94441] DBG2 face_dlib.py:123 [Waiting for pyzm_uid33_gpu_lock portalock...]
06/08/22 11:13:19 zmesdetect_m5[94441] DBG2 face_dlib.py:125 [Got pyzm_uid33_gpu_lock lock...]
06/08/22 11:13:20 zmesdetect_m5[94441] DBG1 face_dlib.py:206 [perf: processor:gpu Finding faces took 1006.28 ms]
06/08/22 11:13:20 zmesdetect_m5[94441] DBG1 face_dlib.py:141 [Released pyzm_uid33_gpu_lock portalock]
06/08/22 11:13:20 zmesdetect_m5[94441] DBG1 face_dlib.py:218 [perf: processor:gpu Computing face recognition distances took 0.79 ms]
06/08/22 11:13:20 zmesdetect_m5[94441] DBG2 detect_sequence.py:711 [This model iteration inside face found: labels: [],conf:[]]
06/08/22 11:13:20 zmesdetect_m5[94441] DBG2 detect_sequence.py:424 [Max object size found to be: 90%]
06/08/22 11:13:20 zmesdetect_m5[94441] DBG2 detect_sequence.py:432 [Converted 90% to 324000.0]
06/08/22 11:13:20 zmesdetect_m5[94441] DBG2 detect_sequence.py:770 [We did not find any face matches in frame: snapshot]
06/08/22 11:13:20 zmesdetect_m5[94441] DBG1 detect_sequence.py:669 [============ Frame: snapshot Running alpr detection type in sequence ==================]
06/08/22 11:13:20 zmesdetect_m5[94441] DBG2 detect_sequence.py:672 [Making sure we have matched one of ['car', 'motorbike', 'bus', 'truck', 'boat'] in ['car', 'truck', 'car', 'car', 'person', 'car'] before we proceed]
06/08/22 11:13:20 zmesdetect_m5[94441] DBG2 alpr.py:24 [Initializing ALPR:Platerecognizer cloud with options:{'name': 'Platerecognizer cloud', 'enabled': 'yes', 'alpr_api_type': 'cloud', 'alpr_service': 'plate_recognizer', 'alpr_key': 'your_plate_recognizer_api_key', 'platrec_stats': 'yes', 'platerec_min_dscore': 0.1, 'platerec_min_score': 0.2, 'max_size': 1600, 'disable_locks': 'no'}]
06/08/22 11:13:20 zmesdetect_m5[94441] DBG2 alpr.py:24 [Initializing ALPR:Platerecognizer cloud with options:{'name': 'Platerecognizer cloud', 'enabled': 'yes', 'alpr_api_type': 'cloud', 'alpr_service': 'plate_recognizer', 'alpr_key': 'your_plate_recognizer_api_key', 'platrec_stats': 'yes', 'platerec_min_dscore': 0.1, 'platerec_min_score': 0.2, 'max_size': 1600, 'disable_locks': 'no'}]
06/08/22 11:13:20 zmesdetect_m5[94441] DBG1 alpr.py:141 [PlateRecognizer ALPR initialized with url: https://api.platerecognizer.com/v1]
06/08/22 11:13:20 zmesdetect_m5[94441] DBG3 detect_sequence.py:689 [alpr has a same_model_sequence strategy of first]
06/08/22 11:13:20 zmesdetect_m5[94441] DBG1 detect_sequence.py:701 [--------- Frame:snapshot Running variation: #1 -------------]
06/08/22 11:13:20 zmesdetect_m5[94441] DBG1 alpr.py:50 [Supplied object is not a file, assuming blob and creating file]
06/08/22 11:13:20 zmesdetect_m5[94441] DBG2 alpr.py:54 [resizing image blob to 1600]
06/08/22 11:13:21 zmesdetect_m5[94441] ERR alpr.py:219 [Plate recognizer rejected the upload with 403 Client Error: Forbidden for url: https://api.platerecognizer.com/v1/plate-reader and body:b'{"detail":"Invalid token.","status_code":403}']
06/08/22 11:13:21 zmesdetect_m5[94441] DBG2 alpr.py:251 [Exiting ALPR with labels:[]]
06/08/22 11:13:21 zmesdetect_m5[94441] DBG2 detect_sequence.py:711 [This model iteration inside alpr found: labels: [],conf:[]]
06/08/22 11:13:21 zmesdetect_m5[94441] DBG2 detect_sequence.py:424 [Max object size found to be: 90%]
06/08/22 11:13:21 zmesdetect_m5[94441] DBG2 detect_sequence.py:432 [Converted 90% to 324000.0]
06/08/22 11:13:21 zmesdetect_m5[94441] DBG2 detect_sequence.py:770 [We did not find any alpr matches in frame: snapshot]
06/08/22 11:13:21 zmesdetect_m5[94441] DBG3 Media.py:271 [Reading https://192.168.0.9/zm/index.php?view=image&eid=2&fid=alarm]
06/08/22 11:13:21 zmesdetect_m5[94441] DBG3 api.py:144 [No need to relogin as access token still has 119.87540513333333 minutes remaining]
06/08/22 11:13:21 zmesdetect_m5[94441] DBG3 api.py:272 [make_request called with url=https://192.168.0.9/zm/index.php?view=image&eid=2&fid=alarm payload={} type=get query={'token': 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJab25lTWluZGVyIiwiaWF0IjoxNjU0NzA4Mzk0LCJleHAiOjE2NTQ3MTU1OTQsInVzZXIiOiJaTUVTIiwidHlwZSI6ImFjY2VzcyJ9.Jbcgnh-zZSTWUopIj6NE__G0Qotkn451tUGLULMryR4'}]
06/08/22 11:13:22 zmesdetect_m5[94441] DBG1 detect_sequence.py:654 [perf: Starting for frame:alarm]
06/08/22 11:13:22 zmesdetect_m5[94441] DBG1 detect_sequence.py:664 [Sequence of detection types to execute: ['object', 'face', 'alpr']]
06/08/22 11:13:22 zmesdetect_m5[94441] DBG1 detect_sequence.py:669 [============ Frame: alarm Running object detection type in sequence ==================]
06/08/22 11:13:22 zmesdetect_m5[94441] DBG3 detect_sequence.py:689 [object has a same_model_sequence strategy of first]
06/08/22 11:13:22 zmesdetect_m5[94441] DBG1 detect_sequence.py:701 [--------- Frame:alarm Running variation: #1 -------------]
06/08/22 11:13:22 zmesdetect_m5[94441] DBG2 yolo.py:136 [detect extracted image dimensions as: 800wx450h]
06/08/22 11:13:22 zmesdetect_m5[94441] DBG2 yolo.py:50 [Waiting for pyzm_uid33_gpu_lock portalock...]
06/08/22 11:13:22 zmesdetect_m5[94441] DBG2 yolo.py:52 [Got pyzm_uid33_gpu_lock portalock]
06/08/22 11:13:22 zmesdetect_m5[94441] DBG1 yolo.py:160 [|---------- YOLO (input image: 800w*450h, model resize dimensions: 416w*416h) ----------|]
06/08/22 11:13:22 zmesdetect_m5[94441] DBG2 yolo.py:68 [Released pyzm_uid33_gpu_lock portalock]
06/08/22 11:13:22 zmesdetect_m5[94441] DBG1 yolo.py:185 [perf: processor:gpu Yolo detection took: 38.76 ms]
06/08/22 11:13:22 zmesdetect_m5[94441] DBG2 yolo.py:220 [perf: processor:gpu Yolo NMS filtering took: 1.13 ms]
06/08/22 11:13:22 zmesdetect_m5[94441] DBG2 object.py:66 [core model detection over, got 6 objects. Now filtering]
06/08/22 11:13:22 zmesdetect_m5[94441] DBG2 object.py:70 [Max object size found to be: 90%]
06/08/22 11:13:22 zmesdetect_m5[94441] DBG2 object.py:78 [Converted 90% to 324000.0]
06/08/22 11:13:22 zmesdetect_m5[94441] DBG2 object.py:103 [Returning filtered list of 6 objects.]
06/08/22 11:13:22 zmesdetect_m5[94441] DBG2 detect_sequence.py:711 [This model iteration inside object found: labels: ['car', 'truck', 'car', 'car', 'person', 'car'],conf:[0.9955545663833618, 0.9052786827087402, 0.7876212000846863, 0.6594511270523071, 0.6286739110946655, 0.48158690333366394]]
06/08/22 11:13:22 zmesdetect_m5[94441] DBG2 detect_sequence.py:424 [Max object size found to be: 90%]
06/08/22 11:13:22 zmesdetect_m5[94441] DBG2 detect_sequence.py:432 [Converted 90% to 324000.0]
06/08/22 11:13:22 zmesdetect_m5[94441] DBG2 detect_sequence.py:502 [intersection: object:car,POLYGON ((200 90, 356 90, 356 168, 200 168, 200 90)) intersects polygon:full_image,POLYGON ((0 0, 800 0, 800 450, 0 450, 0 0))]
06/08/22 11:13:22 zmesdetect_m5[94441] DBG2 detect_sequence.py:518 [Using global match pattern: (person|car|motorbike|bus|truck|boat)]
06/08/22 11:13:22 zmesdetect_m5[94441] DBG2 detect_sequence.py:526 [full_image intersects object:car[[(200, 90), (356, 90), (356, 168), (200, 168)]]]
06/08/22 11:13:22 zmesdetect_m5[94441] DBG2 detect_sequence.py:502 [intersection: object:truck,POLYGON ((1 107, 173 107, 173 211, 1 211, 1 107)) intersects polygon:full_image,POLYGON ((0 0, 800 0, 800 450, 0 450, 0 0))]
06/08/22 11:13:22 zmesdetect_m5[94441] DBG2 detect_sequence.py:518 [Using global match pattern: (person|car|motorbike|bus|truck|boat)]
06/08/22 11:13:22 zmesdetect_m5[94441] DBG2 detect_sequence.py:526 [full_image intersects object:truck[[(1, 107), (173, 107), (173, 211), (1, 211)]]]
06/08/22 11:13:22 zmesdetect_m5[94441] DBG2 detect_sequence.py:502 [intersection: object:car,POLYGON ((46 56, 108 56, 108 102, 46 102, 46 56)) intersects polygon:full_image,POLYGON ((0 0, 800 0, 800 450, 0 450, 0 0))]
06/08/22 11:13:22 zmesdetect_m5[94441] DBG2 detect_sequence.py:518 [Using global match pattern: (person|car|motorbike|bus|truck|boat)]
06/08/22 11:13:22 zmesdetect_m5[94441] DBG2 detect_sequence.py:526 [full_image intersects object:car[[(46, 56), (108, 56), (108, 102), (46, 102)]]]
06/08/22 11:13:22 zmesdetect_m5[94441] DBG2 detect_sequence.py:502 [intersection: object:car,POLYGON ((676 74, 710 74, 710 94, 676 94, 676 74)) intersects polygon:full_image,POLYGON ((0 0, 800 0, 800 450, 0 450, 0 0))]
06/08/22 11:13:22 zmesdetect_m5[94441] DBG2 detect_sequence.py:518 [Using global match pattern: (person|car|motorbike|bus|truck|boat)]
06/08/22 11:13:22 zmesdetect_m5[94441] DBG2 detect_sequence.py:526 [full_image intersects object:car[[(676, 74), (710, 74), (710, 94), (676, 94)]]]
06/08/22 11:13:22 zmesdetect_m5[94441] DBG2 detect_sequence.py:502 [intersection: object:person,POLYGON ((702 147, 766 147, 766 281, 702 281, 702 147)) intersects polygon:full_image,POLYGON ((0 0, 800 0, 800 450, 0 450, 0 0))]
06/08/22 11:13:22 zmesdetect_m5[94441] DBG2 detect_sequence.py:518 [Using global match pattern: (person|car|motorbike|bus|truck|boat)]
06/08/22 11:13:22 zmesdetect_m5[94441] DBG2 detect_sequence.py:526 [full_image intersects object:person[[(702, 147), (766, 147), (766, 281), (702, 281)]]]
06/08/22 11:13:22 zmesdetect_m5[94441] DBG2 detect_sequence.py:502 [intersection: object:car,POLYGON ((-1 58, 43 58, 43 108, -1 108, -1 58)) intersects polygon:full_image,POLYGON ((0 0, 800 0, 800 450, 0 450, 0 0))]
06/08/22 11:13:22 zmesdetect_m5[94441] DBG2 detect_sequence.py:518 [Using global match pattern: (person|car|motorbike|bus|truck|boat)]
06/08/22 11:13:22 zmesdetect_m5[94441] DBG2 detect_sequence.py:526 [full_image intersects object:car[[(-1, 58), (43, 58), (43, 108), (-1, 108)]]]
06/08/22 11:13:22 zmesdetect_m5[94441] DBG2 detect_sequence.py:753 [breaking out of same model loop, as matches found and strategy is "first"]
06/08/22 11:13:22 zmesdetect_m5[94441] DBG1 detect_sequence.py:669 [============ Frame: alarm Running face detection type in sequence ==================]
06/08/22 11:13:22 zmesdetect_m5[94441] DBG3 detect_sequence.py:689 [face has a same_model_sequence strategy of union]
06/08/22 11:13:22 zmesdetect_m5[94441] DBG1 detect_sequence.py:701 [--------- Frame:alarm Running variation: #1 -------------]
06/08/22 11:13:22 zmesdetect_m5[94441] DBG1 face_dlib.py:164 [|---------- Dlib Face recognition (input image: 800w*450h) ----------|]
06/08/22 11:13:22 zmesdetect_m5[94441] DBG3 face_dlib.py:174 [Face options={'name': 'DLIB based face recognition', 'enabled': 'yes', 'save_unknown_faces': 'yes', 'save_unknown_faces_leeway_pixels': 100, 'face_detection_framework': 'dlib', 'known_images_path': '/var/lib/zmeventnotification/known_faces', 'unknown_images_path': '/var/lib/zmeventnotification/unknown_faces', 'face_model': 'cnn', 'face_train_model': 'cnn', 'face_recog_dist_threshold': '0.6', 'face_num_jitters': '1', 'face_upsample_times': '1', 'gpu_max_processes': 1, 'gpu_max_lock_wait': 100, 'cpu_max_processes': 3, 'cpu_max_lock_wait': 100, 'max_size': 800, 'disable_locks': 'no'}]
06/08/22 11:13:22 zmesdetect_m5[94441] DBG2 face_dlib.py:123 [Waiting for pyzm_uid33_gpu_lock portalock...]
06/08/22 11:13:22 zmesdetect_m5[94441] DBG2 face_dlib.py:125 [Got pyzm_uid33_gpu_lock lock...]
06/08/22 11:13:22 zmesdetect_m5[94441] DBG1 face_dlib.py:206 [perf: processor:gpu Finding faces took 74.98 ms]
06/08/22 11:13:22 zmesdetect_m5[94441] DBG1 face_dlib.py:141 [Released pyzm_uid33_gpu_lock portalock]
06/08/22 11:13:22 zmesdetect_m5[94441] DBG1 face_dlib.py:218 [perf: processor:gpu Computing face recognition distances took 0.47 ms]
06/08/22 11:13:22 zmesdetect_m5[94441] DBG2 detect_sequence.py:711 [This model iteration inside face found: labels: [],conf:[]]
06/08/22 11:13:22 zmesdetect_m5[94441] DBG2 detect_sequence.py:424 [Max object size found to be: 90%]
06/08/22 11:13:22 zmesdetect_m5[94441] DBG2 detect_sequence.py:432 [Converted 90% to 324000.0]
06/08/22 11:13:22 zmesdetect_m5[94441] DBG2 detect_sequence.py:770 [We did not find any face matches in frame: alarm]
06/08/22 11:13:22 zmesdetect_m5[94441] DBG1 detect_sequence.py:669 [============ Frame: alarm Running alpr detection type in sequence ==================]
06/08/22 11:13:22 zmesdetect_m5[94441] DBG2 detect_sequence.py:672 [Making sure we have matched one of ['car', 'motorbike', 'bus', 'truck', 'boat'] in ['car', 'truck', 'car', 'car', 'person', 'car'] before we proceed]
06/08/22 11:13:22 zmesdetect_m5[94441] DBG3 detect_sequence.py:689 [alpr has a same_model_sequence strategy of first]
06/08/22 11:13:22 zmesdetect_m5[94441] DBG1 detect_sequence.py:701 [--------- Frame:alarm Running variation: #1 -------------]
06/08/22 11:13:22 zmesdetect_m5[94441] DBG1 alpr.py:50 [Supplied object is not a file, assuming blob and creating file]
06/08/22 11:13:22 zmesdetect_m5[94441] DBG2 alpr.py:54 [resizing image blob to 1600]
06/08/22 11:13:23 zmesdetect_m5[94441] ERR alpr.py:219 [Plate recognizer rejected the upload with 403 Client Error: Forbidden for url: https://api.platerecognizer.com/v1/plate-reader and body:b'{"detail":"Invalid token.","status_code":403}']
06/08/22 11:13:23 zmesdetect_m5[94441] DBG2 alpr.py:251 [Exiting ALPR with labels:[]]
06/08/22 11:13:23 zmesdetect_m5[94441] DBG2 detect_sequence.py:711 [This model iteration inside alpr found: labels: [],conf:[]]
06/08/22 11:13:23 zmesdetect_m5[94441] DBG2 detect_sequence.py:424 [Max object size found to be: 90%]
06/08/22 11:13:23 zmesdetect_m5[94441] DBG2 detect_sequence.py:432 [Converted 90% to 324000.0]
06/08/22 11:13:23 zmesdetect_m5[94441] DBG2 detect_sequence.py:770 [We did not find any alpr matches in frame: alarm]
06/08/22 11:13:23 zmesdetect_m5[94441] DBG1 detect_sequence.py:827 [perf: TOTAL detection sequence (with image loads) took: 9045.17 ms to process 2]
06/08/22 11:13:23 zmesdetect_m5[94441] INF zm_detect.py:479 [Prediction string:[s] detected:car:100% truck:91% person:68% ]
06/08/22 11:13:23 zmesdetect_m5[94441] DBG1 zm_detect.py:481 [Prediction string JSON:{"labels": ["car", "truck", "car", "car", "person", "car"], "boxes": [[200, 90, 356, 168], [1, 106, 175, 208], [46, 56, 108, 102], [676, 74, 710, 94], [697, 139, 767, 281], [-1, 58, 43, 108]], "frame_id": "snapshot", "confidences": [0.9954595565795898, 0.9149943590164185, 0.8078308701515198, 0.7353916764259338, 0.6761721968650818, 0.4781055450439453], "image_dimensions": {"original": [1080, 1920], "resized": [450, 800]}}]
[s] detected:car:100% truck:91% person:68% --SPLIT--{"labels": ["car", "truck", "car", "car", "person", "car"], "boxes": [[200, 90, 356, 168], [1, 106, 175, 208], [46, 56, 108, 102], [676, 74, 710, 94], [697, 139, 767, 281], [-1, 58, 43, 108]], "frame_id": "snapshot", "confidences": [0.9954595565795898, 0.9149943590164185, 0.8078308701515198, 0.7353916764259338, 0.6761721968650818, 0.4781055450439453], "image_dimensions": {"original": [1080, 1920], "resized": [450, 800]}}
06/08/22 11:13:23 zmesdetect_m5[94441] DBG1 zm_detect.py:499 [Writing detected image to /tmp/objdetect.jpg]
06/08/22 11:13:23 zmesdetect_m5[94441] DBG1 zm_detect.py:503 [Writing JSON output to /tmp/objects.json]
06/08/22 11:13:23 zmesdetect_m5[94441] DBG1 zm_detect.py:557 [Closing logs]
- Attachments
-
- objdetect.jpg (208 KiB) Viewed 8585 times
Re: Looking for a zmes installation Feat GPU support
I’m just cooking dinner, but that looks like it’s functioning now.
Only the number plate recognition is raising errors. Not a problem. You can configure it off or set it up.
Only the number plate recognition is raising errors. Not a problem. You can configure it off or set it up.
-
Re: Looking for a zmes installation Feat GPU support
The event notifier has been working flawlessly over the last few days,
Quick question regarding object detection. Lets say I want to detect dogs/cats/birds etc where would I change this in the config? would it be located in the objectconfig.ini? Or is this located elsewhere?
Quick question regarding object detection. Lets say I want to detect dogs/cats/birds etc where would I change this in the config? would it be located in the objectconfig.ini? Or is this located elsewhere?
Re: Looking for a zmes installation Feat GPU support
These are the steps that I used to get ZMES up and running on my box with a gtx 1650, There were no complete guides out there to be found as it came to getting ZMES up and running on Ubuntu 20.04. Here is my steps that I used. If you guys see anything that needs changed please let me know.
Now I just need to find a mlapi guide so I can get this up and running on my remote zm box over vpn.
This is a heavily edited guide taken from https://www.reddit.com/r/ZoneMinder/com ... _with_gpu/
###Install some tools
###Install Nvidia Drivers and Cuda Toolkit
###Download cuDNN that matches "nvcc -V" --> https://developer.nvidia.com/rdp/cudnn-download
###Make sure that you download version 8.0.5 Previous Versions would not work with my install but this one worked out of the box
###Install CUDNN:
###Download compile and install OpenCV with cuda and cuDNN####
#REF: https://cuda-chen.github.io/image%20pro ... -1804.html
##Install OpenCV dependencies
##Installing pip and numpy
#Ubuntu 20.04 uses gcc version 9 which is not compatible with OpenCV source code###Change version using update-alternatives
#REF: https://linuxconfig.org/how-to-switch-b ... ocal-fossa
###select (gcc-8)
###Download OpenCV Source Code
###Configure OpenCV
###Use nproc to display number of available cores. In my case I use "-j12" to compile with 12 cores.
### you might have to copy cv2 to the correct directory. I could not figure out how to make it install to the correct path but I did a quick search of the hdd to find cv2.so and copied the directory 'cv2' to /usr/lib/python3.8/dist-packages/ This should get rid of the import error in python3.
###Install Face Recognition
###Install zoneminder follow directions at link below
https://wiki.zoneminder.com/Ubuntu_Serv ... der_1.36.x
###Create selfsinged ssl certificates and setup HTTPS#Side note: you'll need to use letsencrypt with a domain name if you plan on pushing notification with alert photos. It won't work with self signed and IP addresses.
#For the purposes of these notes however I'm going to use a self signed certificate.
#Replace / Add the following (Change IP address to suite your environment)
###Restart apache2 server
### Compile Dlib from source
https://gist.github.com/smitshilu/7b210 ... 045a8c21ff
###Install zmeventnotification#REF: https://zmeventnotification.readthedocs ... stall.html
###Edit the following entries from secrets.ini file
ZMES_PICTURE_URL=https://localhost/zm/index.php?view=ima ... &width=600
ZM_USER=user
ZM_PASSWORD=password
ZM_PORTAL=https://localhost/zm
ZM_API_PORTAL=https://localhost/zm/api
ES_CERT_FILE=/etc/zm/apache2/ssl/zoneminder.crt
ES_KEY_FILE=/etc/zm/apache2/ssl/zoneminder.key
###Install Dependencies for zmeventnotifications
#If you want to use MQTT:
### Install zmeventserver
###Test zmeventserver
### If everything works ctrl+c to close
#Navigate to your zoneminder url http://ipaddress/zm and verify it gets redirected to https://ipaddress/zm and accept the self-signed certificate.
#Go to Options > System and enable "OPT_USE_EVENTNOTIFICATION"
#Also ensure to enable "AUTH_HASH_LOGINS"
#Setup Zoneminder as per:
https://zoneminder.readthedocs.io/en/st ... arted.html
Now I just need to find a mlapi guide so I can get this up and running on my remote zm box over vpn.
This is a heavily edited guide taken from https://www.reddit.com/r/ZoneMinder/com ... _with_gpu/
###Install some tools
Code: Select all
sudo apt install vim nfs-kernel-server software-properties-common curl
Code: Select all
sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt update
sudo apt install nvidia-driver-440 nvidia-headless-440 nvidia-cuda-toolkit
sudo reboot
###Make sure that you download version 8.0.5 Previous Versions would not work with my install but this one worked out of the box
###Install CUDNN:
Code: Select all
cd ~/Downloads
tar -zxvf cudnn-10.1-linux-x64-v7.6.5.32.tgz
cd ~/Downloads/cuda
sudo cp -P lib64/* /usr/lib/x86_64-linux-gnu/
sudo cp -P include/* /usr/include/x86_64-linux-gnu/
cd ~
#REF: https://cuda-chen.github.io/image%20pro ... -1804.html
##Install OpenCV dependencies
Code: Select all
sudo apt-get install build-essential cmake unzip pkg-config git \
libjpeg-dev libpng-dev libtiff-dev \
libavcodec-dev libavformat-dev libswscale-dev \
libv4l-dev libxvidcore-dev libx264-dev \libgtk-3-dev \
libatlas-base-dev gfortran \
python3-dev python3-pip python2
Code: Select all
curl https://bootstrap.pypa.io/get-pip.py --output get-pip.py
sudo python3 get-pip.py
pip install numpy
#REF: https://linuxconfig.org/how-to-switch-b ... ocal-fossa
Code: Select all
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-8 8
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-8 8
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 9
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-9 9
sudo update-alternatives --config gcc
###Download OpenCV Source Code
Code: Select all
cd ~
mkdir git
cd git
git clone https://github.com/opencv/opencv.git
git clone https://github.com/opencv/opencv_contrib.git
cd opencv
git checkout 4.5.5
cd ..
cd opencv_contrib
git checkout 4.5.5
cd .. ~/git/opencv
Code: Select all
mkdir build && cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D INSTALL_C_EXAMPLES=OFF \
-D OPENCV_ENABLE_NONFREE=ON \
-D WITH_CUDA=ON \
-D WITH_CUDNN=ON \
-D OPENCV_DNN_CUDA=ON \
-D ENABLE_FAST_MATH=1 \
-D CUDA_FAST_MATH=1 \
-D CUDA_ARCH_BIN=7.5 \
-D WITH_CUBLAS=1 \
-D OPENCV_EXTRA_MODULES_PATH=~/git/opencv_contrib/modules/ \
-D HAVE_opencv_python3=ON \
-D PYTHON_EXECUTABLE=/usr/bin \
-D BUILD_EXAMPLES=ON ..
Code: Select all
make -j12
sudo make install
sudo ldconfig
###Install Face Recognition
Code: Select all
sudo -H pip3 install face_recognition
https://wiki.zoneminder.com/Ubuntu_Serv ... der_1.36.x
###Create selfsinged ssl certificates and setup HTTPS#Side note: you'll need to use letsencrypt with a domain name if you plan on pushing notification with alert photos. It won't work with self signed and IP addresses.
#For the purposes of these notes however I'm going to use a self signed certificate.
Code: Select all
sudo mkdir /etc/zm/apache2
sudo mkdir /etc/zm/apache2/ssl
sudo openssl req -x509 -nodes -days 4096 -newkey rsa:2048 -keyout /etc/zm/apache2/ssl/zoneminder.key -out /etc/zm/apache2/ssl/zoneminder.crt
sudo chown www-data:www-data /etc/zm/apache2/ssl/*
sudo a2enmod ssl
sudo nano /etc/apache2/sites-enabled/000-default.conf
Code: Select all
<VirtualHost *:80>
Redirect / https://10.0.0.18/
</VirtualHost>
<VirtualHost *:443>
SSLEngine on
SSLCertificateFile /etc/zm/apache2/ssl/zoneminder.crt
SSLCertificateKeyFile /etc/zm/apache2/ssl/zoneminder.key
# The ServerName directive sets the request scheme, hostname and port that
# the server uses to identify itself. This is used when creating
# redirection URLs. In the context of virtual hosts, the ServerName
# specifies what hostname must appear in the request's Host: header to
# match this virtual host. For the default virtual host (this file) this
# value is not decisive as it is used as a last resort host regardless.
# However, you must set it for any further virtual host explicitly.
#ServerName www.example.com
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
# Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
# error, crit, alert, emerg.
# It is also possible to configure the loglevel for particular
# modules, e.g.
#LogLevel info ssl:warn
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
# For most configuration files from conf-available/, which are
# enabled or disabled at a global level, it is possible to
# include a line for only one particular virtual host. For example the
# following line enables the CGI configuration for this host only
# after it has been globally disabled with "a2disconf".
#Include conf-available/serve-cgi-bin.conf
</VirtualHost>
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
Code: Select all
sudo systemctl restart apache2
https://gist.github.com/smitshilu/7b210 ... 045a8c21ff
###Install zmeventnotification#REF: https://zmeventnotification.readthedocs ... stall.html
Code: Select all
cd ~/git
git clone https://github.com/pliablepixels/zmeventnotification.git
cd zmeventnotificationgit fetch --tagsgit checkout $(git describe --tags $(git rev-list --tags --max-count=1))
Code: Select all
nano secrets.ini
ZM_USER=user
ZM_PASSWORD=password
ZM_PORTAL=https://localhost/zm
ZM_API_PORTAL=https://localhost/zm/api
ES_CERT_FILE=/etc/zm/apache2/ssl/zoneminder.crt
ES_KEY_FILE=/etc/zm/apache2/ssl/zoneminder.key
###Install Dependencies for zmeventnotifications
Code: Select all
sudo perl -MCPAN -e "install Crypt::MySQL"
sudo perl -MCPAN -e "install Config::IniFiles"
sudo perl -MCPAN -e "install Crypt::Eksblowfish::Bcrypt"
sudo apt-get install libyaml-perl
sudo perl -MCPAN -e "install Net::WebSocket::Server"
sudo apt-get install libjson-perl
perl -MCPAN -e "install LWP::Protocol::https"
Code: Select all
perl -MCPAN -e "install Net::MQTT::Simple"
Code: Select all
sudo ./install.sh
Code: Select all
sudo -u www-data zmeventnotification.pl --config /etc/zm/zmeventnotification.ini
#Navigate to your zoneminder url http://ipaddress/zm and verify it gets redirected to https://ipaddress/zm and accept the self-signed certificate.
#Go to Options > System and enable "OPT_USE_EVENTNOTIFICATION"
#Also ensure to enable "AUTH_HASH_LOGINS"
#Setup Zoneminder as per:
https://zoneminder.readthedocs.io/en/st ... arted.html