{"id":15675,"date":"2024-01-30T16:26:04","date_gmt":"2024-01-30T07:26:04","guid":{"rendered":"https:\/\/www.tetsumag.com\/?p=15675"},"modified":"2026-08-01T13:38:27","modified_gmt":"2026-08-01T04:38:27","slug":"377","status":"publish","type":"post","link":"https:\/\/tetsumag.com\/blog\/2024\/01\/30\/377\/","title":{"rendered":"RTSP\u30ab\u30e1\u30e9\u3092\u4f7f\u3063\u305f\u7269\u4f53\u691c\u77e5AI\u306e\u69cb\u7bc9\u30ac\u30a4\u30c9"},"content":{"rendered":"\n<p>\u3053\u306e\u8a18\u4e8b\u306f\u3001RTSP\uff08Real-Time Streaming Protocol\uff09\u5bfe\u5fdc\u306e\u30ab\u30e1\u30e9\u3092\u4f7f\u7528\u3057\u3066\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u7269\u4f53\u691c\u77e5AI\u3092\u69cb\u7bc9\u3059\u308b\u65b9\u6cd5\u306b\u3064\u3044\u3066\u8a73\u3057\u304f\u8aac\u660e\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n<blockquote class=\"wp-embedded-content\" data-secret=\"CAsF8wbHAj\"><p><a href=\"https:\/\/www.tetsumag.com\/2023\/03\/11\/317\/\">\u3010Python\u3011\u30ab\u30e1\u30e9\u306b\u6620\u3063\u305f\u753b\u50cf\u3092\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u306b\u7269\u4f53\u691c\u77e5\u3059\u308b\u3010OpenCV\u00d7YOLO\u3011<\/a><\/p><\/blockquote>\n<p><iframe class=\"wp-embedded-content\" sandbox=\"allow-scripts\" security=\"restricted\" style=\"position: absolute; clip: rect(1px, 1px, 1px, 1px);\" title=\"&#8220;\u3010Python\u3011\u30ab\u30e1\u30e9\u306b\u6620\u3063\u305f\u753b\u50cf\u3092\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u306b\u7269\u4f53\u691c\u77e5\u3059\u308b\u3010OpenCV\u00d7YOLO\u3011&#8221; &#8212; \u3066\u3064\u307e\u3050\" src=\"https:\/\/www.tetsumag.com\/2023\/03\/11\/317\/embed\/#?secret=VXoRXRwvW8#?secret=CAsF8wbHAj\" data-secret=\"CAsF8wbHAj\" width=\"500\" height=\"282\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\"><\/iframe><\/p>\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_38 counter-hierarchy ez-toc-counter ez-toc-transparent ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\">\u76ee\u6b21<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" style=\"display: none;\"><label for=\"item\" aria-label=\"Table of Content\"><span style=\"display: flex;align-items: center;width: 35px;height: 30px;justify-content: center;\"><svg style=\"fill: #444444;color:#444444\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #444444;color:#444444\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/label><input type=\"checkbox\" id=\"item\"><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/tetsumag.com\/blog\/2024\/01\/30\/377\/#RTSP%E5%AF%BE%E5%BF%9C%E3%82%AB%E3%83%A1%E3%83%A9\" title=\"RTSP\u5bfe\u5fdc\u30ab\u30e1\u30e9\">RTSP\u5bfe\u5fdc\u30ab\u30e1\u30e9<\/a><ul class='ez-toc-list-level-3'><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/tetsumag.com\/blog\/2024\/01\/30\/377\/#POC%E3%81%AE%E6%AE%B5%E9%9A%8E%E3%81%A7%E3%81%AF4000%E5%86%86%E7%A8%8B%E5%BA%A6%E3%81%AE%E5%AE%89%E4%BE%A1%E3%81%AA%E3%83%A2%E3%83%8E%E3%81%A7%E3%82%82OK\" title=\"POC\u306e\u6bb5\u968e\u3067\u306f4000\u5186\u7a0b\u5ea6\u306e\u5b89\u4fa1\u306a\u30e2\u30ce\u3067\u3082OK\">POC\u306e\u6bb5\u968e\u3067\u306f4000\u5186\u7a0b\u5ea6\u306e\u5b89\u4fa1\u306a\u30e2\u30ce\u3067\u3082OK<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/tetsumag.com\/blog\/2024\/01\/30\/377\/#%E7%84%A1%E7%B7%9ALAN%E6%8E%A5%E7%B6%9A\" title=\"\u7121\u7ddaLAN\u63a5\u7d9a\">\u7121\u7ddaLAN\u63a5\u7d9a<\/a><ul class='ez-toc-list-level-3'><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/tetsumag.com\/blog\/2024\/01\/30\/377\/#RTSP_URL%E3%82%92%E5%8F%96%E5%BE%97%E3%81%99%E3%82%8C%E3%81%B0%E3%83%91%E3%82%BD%E3%82%B3%E3%83%B3%E3%81%A8%E6%8E%A5%E7%B6%9A%E3%81%A7%E3%81%8D%E3%82%8B\" title=\"RTSP_URL\u3092\u53d6\u5f97\u3059\u308c\u3070\u30d1\u30bd\u30b3\u30f3\u3068\u63a5\u7d9a\u3067\u304d\u308b\">RTSP_URL\u3092\u53d6\u5f97\u3059\u308c\u3070\u30d1\u30bd\u30b3\u30f3\u3068\u63a5\u7d9a\u3067\u304d\u308b<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/tetsumag.com\/blog\/2024\/01\/30\/377\/#%E7%94%BB%E8%A7%92%E3%82%92%E8%AA%BF%E6%95%B4%E3%81%99%E3%82%8B\" title=\"\u753b\u89d2\u3092\u8abf\u6574\u3059\u308b\">\u753b\u89d2\u3092\u8abf\u6574\u3059\u308b<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/tetsumag.com\/blog\/2024\/01\/30\/377\/#%E4%BF%9D%E5%AD%98%E9%96%93%E9%9A%94%E3%82%92%E8%A8%AD%E5%AE%9A%E3%81%97%E3%81%A6%E3%80%81%E3%82%A2%E3%83%8E%E3%83%86%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E7%94%A8%E3%81%AE%E7%94%BB%E5%83%8F%E3%82%92%E8%87%AA%E5%8B%95%E4%BF%9D%E5%AD%98\" title=\"\u4fdd\u5b58\u9593\u9694\u3092\u8a2d\u5b9a\u3057\u3066\u3001\u30a2\u30ce\u30c6\u30fc\u30b7\u30e7\u30f3\u7528\u306e\u753b\u50cf\u3092\u81ea\u52d5\u4fdd\u5b58\">\u4fdd\u5b58\u9593\u9694\u3092\u8a2d\u5b9a\u3057\u3066\u3001\u30a2\u30ce\u30c6\u30fc\u30b7\u30e7\u30f3\u7528\u306e\u753b\u50cf\u3092\u81ea\u52d5\u4fdd\u5b58<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/tetsumag.com\/blog\/2024\/01\/30\/377\/#%E7%89%A9%E4%BD%93%E6%A4%9C%E7%9F%A5%E3%83%A2%E3%83%87%E3%83%AB%E3%82%92%E9%81%A9%E7%94%A8%E3%81%99%E3%82%8B\" title=\"\u7269\u4f53\u691c\u77e5\u30e2\u30c7\u30eb\u3092\u9069\u7528\u3059\u308b\">\u7269\u4f53\u691c\u77e5\u30e2\u30c7\u30eb\u3092\u9069\u7528\u3059\u308b<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/tetsumag.com\/blog\/2024\/01\/30\/377\/#%E3%81%BE%E3%81%A8%E3%82%81\" title=\"\u307e\u3068\u3081\">\u307e\u3068\u3081<\/a><\/li><\/ul><\/nav><\/div>\n<h2><span class=\"ez-toc-section\" id=\"RTSP%E5%AF%BE%E5%BF%9C%E3%82%AB%E3%83%A1%E3%83%A9\"><\/span>RTSP\u5bfe\u5fdc\u30ab\u30e1\u30e9<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u7269\u4f53\u691c\u77e5AI\u3092\u69cb\u7bc9\u3059\u308b\u306b\u306f\u3001RTSP\u5bfe\u5fdc\u306e\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u30ab\u30e1\u30e9\u304c\u5fc5\u8981\u3067\u3059\u3002<\/p>\n<p>\u9069\u5207\u306aRTSP\u30ab\u30e1\u30e9\u3092\u9078\u3076\u30dd\u30a4\u30f3\u30c8\u3092\u8003\u3048\u307e\u3057\u3087\u3046\u3002<\/p>\n<blockquote class=\"wp-embedded-content\" data-secret=\"DHNm4tjuFN\"><p><a href=\"https:\/\/www.tetsumag.com\/2023\/03\/13\/313\/\">\u3010\u753b\u50cf\u8a8d\u8b58\u3011\u30a8\u30c3\u30b8AI\u306b\u3064\u3044\u3066\u3010\u4e8b\u4f8b\u3011<\/a><\/p><\/blockquote>\n<p><iframe class=\"wp-embedded-content\" sandbox=\"allow-scripts\" security=\"restricted\" style=\"position: absolute; clip: rect(1px, 1px, 1px, 1px);\" title=\"&#8220;\u3010\u753b\u50cf\u8a8d\u8b58\u3011\u30a8\u30c3\u30b8AI\u306b\u3064\u3044\u3066\u3010\u4e8b\u4f8b\u3011&#8221; &#8212; \u3066\u3064\u307e\u3050\" src=\"https:\/\/www.tetsumag.com\/2023\/03\/13\/313\/embed\/#?secret=hFyjmmU50h#?secret=DHNm4tjuFN\" data-secret=\"DHNm4tjuFN\" width=\"500\" height=\"282\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\"><\/iframe><\/p>\n<h3><span class=\"ez-toc-section\" id=\"POC%E3%81%AE%E6%AE%B5%E9%9A%8E%E3%81%A7%E3%81%AF4000%E5%86%86%E7%A8%8B%E5%BA%A6%E3%81%AE%E5%AE%89%E4%BE%A1%E3%81%AA%E3%83%A2%E3%83%8E%E3%81%A7%E3%82%82OK\"><\/span>POC\u306e\u6bb5\u968e\u3067\u306f4000\u5186\u7a0b\u5ea6\u306e\u5b89\u4fa1\u306a\u30e2\u30ce\u3067\u3082OK<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>4000\u5186\u7a0b\u5ea6\u306e\u3082\u306e\u3067\u3082\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u6982\u5ff5\u5b9f\u8a3c\uff08POC\uff09\u3084\u5c0f\u898f\u6a21\u306a\u76e3\u8996\u30b7\u30b9\u30c6\u30e0\u306b\u306f\u5341\u5206\u3067\u3059\u3002<\/p>\n<p>\u4fa1\u683c\u3068\u6027\u80fd\u306e\u30d0\u30e9\u30f3\u30b9\u3092\u53d6\u308a\u306a\u304c\u3089\u3001\u81ea\u5206\u306e\u30cb\u30fc\u30ba\u306b\u5408\u3063\u305f\u30ab\u30e1\u30e9\u3092\u9078\u3073\u307e\u3057\u3087\u3046\u3002<\/p>\n<div class=\"linkcard\"><div class=\"lkc-external-wrap\"><a class=\"lkc-link no_icon\" href=\"https:\/\/amzn.to\/3Um7hgA\" target=\"_blank\" rel=\"external noopener\"><div class=\"lkc-card\"><div class=\"lkc-info\"><div class=\"lkc-domain\">amzn.to<\/div><\/div><div class=\"lkc-content\"><figure class=\"lkc-thumbnail\"><img class=\"lkc-thumbnail-img\" src=\"https:\/\/s.wordpress.com\/mshots\/v1\/https%3A%2F%2Famzn.to%2F3Um7hgA?w=200\" alt=\"\" \/><\/figure><div class=\"lkc-title\"><div class=\"lkc-title-text\">\u3054\u8ff7\u60d1\u3092\u304a\u304b\u3051\u3057\u3066\u3044\u307e\u3059\uff01<\/div><\/div><div class=\"lkc-url\">https:\/\/amzn.to\/3Um7hgA<\/div><div class=\"lkc-excerpt\"><\/div><\/div><div class=\"clear\"><\/div><\/div><\/a><\/div><\/div>\n<h2><span class=\"ez-toc-section\" id=\"%E7%84%A1%E7%B7%9ALAN%E6%8E%A5%E7%B6%9A\"><\/span>\u7121\u7ddaLAN\u63a5\u7d9a<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>RTSP\u30ab\u30e1\u30e9\u3092\u7121\u7ddaLAN\u3067\u30d1\u30bd\u30b3\u30f3\u306b\u63a5\u7d9a\u3059\u308b\u305f\u3081\u306b\u306f\u3001RTSP_URL\u3092\u53d6\u5f97\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n<h3><span class=\"ez-toc-section\" id=\"RTSP_URL%E3%82%92%E5%8F%96%E5%BE%97%E3%81%99%E3%82%8C%E3%81%B0%E3%83%91%E3%82%BD%E3%82%B3%E3%83%B3%E3%81%A8%E6%8E%A5%E7%B6%9A%E3%81%A7%E3%81%8D%E3%82%8B\"><\/span>RTSP_URL\u3092\u53d6\u5f97\u3059\u308c\u3070\u30d1\u30bd\u30b3\u30f3\u3068\u63a5\u7d9a\u3067\u304d\u308b<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u4ee5\u4e0b\u306fPython\u30b3\u30fc\u30c9\u306e\u4f8b\u3067\u3059\u3002<\/p>\n<p>\u307e\u305a\u3001RTSP\u30ab\u30e1\u30e9\u306eURL\u3092\u53d6\u5f97\u3057\u3001\u305d\u308c\u3092\u4f7f\u3063\u3066\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u30ab\u30e1\u30e9\u306b\u63a5\u7d9a\u3057\u307e\u3059\u3002<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" title=\"\">\r\n\r\nimport cv2\r\n\r\n# RTSP URL\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002\u3053\u308c\u306f\u30ab\u30e1\u30e9\u306b\u3088\u3063\u3066\u7570\u306a\u308a\u307e\u3059\u3002\r\n# \u4f8b: rtsp:\/\/username:password@camera_ip_address:port\/stream_path\r\nrtsp_url = \"\u3053\u3053\u306bURL\u3092\u5165\u529b\"\r\n\r\nif __name__ == '__main__':\r\n    # RTSP URL\u3092\u4f7f\u3063\u3066\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u30ab\u30e1\u30e9\u306b\u63a5\u7d9a\r\n    capture = cv2.VideoCapture(rtsp_url)\r\n\r\n    # \u300cq\u300d\u304c\u62bc\u3055\u308c\u308b\u307e\u3067\u7e70\u308a\u8fd4\u3057\r\n    while True:\r\n        # \u30ab\u30e1\u30e9\u304b\u3089\u753b\u50cf\u53d6\u5f97q\r\n        ret, frame = capture.read()\r\n        # \u53d6\u5f97\u306b\u6210\u529f\u3057\u305f\u5834\u5408\u3001\u8868\u793a\u3059\u308b\r\n        if ret:\r\n            # \u753b\u50cf\u8868\u793a\r\n            cv2.imshow('camera', frame)\r\n            # \u30ad\u30fc\u64cd\u4f5c\u3092\u78ba\u8a8d\r\n            if cv2.waitKey(1) & 0xFF == ord('q'):\r\n                break\r\n\r\n    # \u7d42\u4e86\u51e6\u7406\r\n    capture.release()\r\n    cv2.destroyAllWindows()\r\n\r\n\r\n<\/pre>\n<h3><span class=\"ez-toc-section\" id=\"%E7%94%BB%E8%A7%92%E3%82%92%E8%AA%BF%E6%95%B4%E3%81%99%E3%82%8B\"><\/span>\u753b\u89d2\u3092\u8abf\u6574\u3059\u308b<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u30ab\u30e1\u30e9\u306e\u753b\u89d2\u3092\u8abf\u6574\u3059\u308b\u3053\u3068\u3067\u3001\u81ea\u5206\u306e\u6559\u5e2b\u30c7\u30fc\u30bf\u3092\u4f7f\u3063\u3066\u30e2\u30c7\u30eb\u3092\u5b66\u7fd2\u3055\u305b\u308b\u969b\u306b\u3001\u30e2\u30c7\u30eb\u306e\u7cbe\u5ea6\u304c\u826f\u304f\u306a\u308b\u3088\u3046\u306b\u5de5\u592b\u3057\u307e\u3059\u3002<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" title=\"\">\r\n\r\nimport cv2\r\n\r\n# RTSP URL\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002\u3053\u308c\u306f\u30ab\u30e1\u30e9\u306b\u3088\u3063\u3066\u7570\u306a\u308a\u307e\u3059\u3002\r\n# \u4f8b: rtsp:\/\/username:password@camera_ip_address:port\/stream_path\r\nrtsp_url = \"\u3053\u3053\u306bURL\u3092\u5165\u529b\"\r\n\r\nif __name__ == '__main__':\r\n    # RTSP URL\u3092\u4f7f\u3063\u3066\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u30ab\u30e1\u30e9\u306b\u63a5\u7d9a\r\n    capture = cv2.VideoCapture(rtsp_url)\r\n\r\n    # \u753b\u8cea\u306e\u8a2d\u5b9a\r\n    # \u4f8b: \u5e45\u3068\u9ad8\u3055\u30921280x720\u306b\u8a2d\u5b9a\r\n    capture.set(cv2.CAP_PROP_FRAME_WIDTH, 1280)\r\n    capture.set(cv2.CAP_PROP_FRAME_HEIGHT, 720)\r\n\r\n    # \u300cq\u300d\u304c\u62bc\u3055\u308c\u308b\u307e\u3067\u7e70\u308a\u8fd4\u3057\r\n    while True:\r\n        # \u30ab\u30e1\u30e9\u304b\u3089\u753b\u50cf\u53d6\u5f97q\r\n        ret, frame = capture.read()\r\n        # \u53d6\u5f97\u306b\u6210\u529f\u3057\u305f\u5834\u5408\u3001\u8868\u793a\u3059\u308b\r\n        if ret:\r\n            # \u753b\u50cf\u306e\u30af\u30ed\u30c3\u30d7\r\n            # \u3053\u3053\u3067\u306f\u753b\u50cf\u306e\u5de6\u4e0a\u9685\u304b\u3089200x200\u30d4\u30af\u30bb\u30eb\u306e\u9818\u57df\u3092\u30af\u30ed\u30c3\u30d7\u3057\u307e\u3059\r\n            # startX, startY, width, height\u3092\u5909\u66f4\u3057\u3066\u5fc5\u8981\u306a\u9818\u57df\u3092\u6307\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044\r\n            cropped_frame = frame[370:800, 600:1150]\r\n\r\n            # \u30af\u30ed\u30c3\u30d7\u3057\u305f\u753b\u50cf\u8868\u793a\r\n            cv2.imshow('camera', cropped_frame)\r\n            # \u753b\u50cf\u8868\u793a\r\n            # cv2.imshow('camera', frame)\r\n            # \u30ad\u30fc\u64cd\u4f5c\u3092\u78ba\u8a8d\r\n            if cv2.waitKey(1) & 0xFF == ord('q'):\r\n                break\r\n\r\n    # \u7d42\u4e86\u51e6\u7406\r\n    capture.release()\r\n    cv2.destroyAllWindows()\r\n\r\n\r\n<\/pre>\n<h3><span class=\"ez-toc-section\" id=\"%E4%BF%9D%E5%AD%98%E9%96%93%E9%9A%94%E3%82%92%E8%A8%AD%E5%AE%9A%E3%81%97%E3%81%A6%E3%80%81%E3%82%A2%E3%83%8E%E3%83%86%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E7%94%A8%E3%81%AE%E7%94%BB%E5%83%8F%E3%82%92%E8%87%AA%E5%8B%95%E4%BF%9D%E5%AD%98\"><\/span>\u4fdd\u5b58\u9593\u9694\u3092\u8a2d\u5b9a\u3057\u3066\u3001\u30a2\u30ce\u30c6\u30fc\u30b7\u30e7\u30f3\u7528\u306e\u753b\u50cf\u3092\u81ea\u52d5\u4fdd\u5b58<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u30c7\u30fc\u30bf\u3092\u4fdd\u5b58\u3059\u308b\u305f\u3081\u306b\u3001\u753b\u50cf\u306e\u81ea\u52d5\u4fdd\u5b58\u8a2d\u5b9a\u3092\u884c\u3044\u307e\u3057\u3087\u3046\u3002<\/p>\n<p>\u4ee5\u4e0b\u306ePython\u30b3\u30fc\u30c9\u306f\u3001\u4e00\u5b9a\u306e\u9593\u9694\u3067\u753b\u50cf\u3092\u81ea\u52d5\u7684\u306b\u4fdd\u5b58\u3059\u308b\u4f8b\u3067\u3059\u3002<\/p>\n<p>\u4fdd\u5b58\u3055\u308c\u305f\u753b\u50cf\u306f\u3001\u5f8c\u3067\u30a2\u30ce\u30c6\u30fc\u30b7\u30e7\u30f3\u3068\u3057\u3066\u4f7f\u7528\u3067\u304d\u307e\u3059\u3002<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" title=\"\">\r\n\r\nimport cv2\r\nimport time\r\nimport os\r\n\r\n# RTSP URL\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002\u3053\u308c\u306f\u30ab\u30e1\u30e9\u306b\u3088\u3063\u3066\u7570\u306a\u308a\u307e\u3059\u3002\r\n# \u4f8b: rtsp:\/\/username:password@camera_ip_address:port\/stream_path\r\nrtsp_url = \"\u3053\u3053\u306bURL\u3092\u5165\u529b\"\r\n\r\n# \u753b\u50cf\u3092\u4fdd\u5b58\u3059\u308b\u30d5\u30a9\u30eb\u30c0\u306e\u30d1\u30b9\uff08Windows\u306e\u4f8b\u3001\u30e6\u30fc\u30b6\u30fc\u540d\u306f\u9069\u5b9c\u5909\u66f4\u3057\u3066\u304f\u3060\u3055\u3044\uff09\r\nsave_path = 'C:\\gazou'\r\n\r\n# \u4fdd\u5b58\u9593\u9694\u3092\u79d2\u5358\u4f4d\u3067\u8a2d\u5b9a\uff085\u5206 = 300\u79d2\uff09\r\nsave_interval = 150\r\n\r\n# \u6700\u5f8c\u306b\u753b\u50cf\u3092\u4fdd\u5b58\u3057\u305f\u6642\u523b\u3092\u8ffd\u8de1\r\nlast_saved_time = time.time()\r\n\r\nif __name__ == '__main__':\r\n    # RTSP URL\u3092\u4f7f\u3063\u3066\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u30ab\u30e1\u30e9\u306b\u63a5\u7d9a\r\n    capture = cv2.VideoCapture(rtsp_url)\r\n\r\n    # \u753b\u8cea\u306e\u8a2d\u5b9a\r\n    # \u4f8b: \u5e45\u3068\u9ad8\u3055\u30921280x720\u306b\u8a2d\u5b9a\r\n    capture.set(cv2.CAP_PROP_FRAME_WIDTH, 1280)\r\n    capture.set(cv2.CAP_PROP_FRAME_HEIGHT, 720)\r\n\r\n    while True:\r\n        # \u30ab\u30e1\u30e9\u304b\u3089\u753b\u50cf\u53d6\u5f97\r\n        ret, frame = capture.read()\r\n\r\n        if ret:\r\n            # \u753b\u50cf\u306e\u30af\u30ed\u30c3\u30d7\r\n            # \u4f8b: \u753b\u50cf\u306e\u7279\u5b9a\u306e\u9818\u57df\u3092\u30af\u30ed\u30c3\u30d7\r\n            cropped_frame = frame[370:800, 600:1150]\r\n\r\n            # \u30af\u30ed\u30c3\u30d7\u3057\u305f\u753b\u50cf\u8868\u793a\r\n            cv2.imshow('camera', cropped_frame)\r\n\r\n            # \u73fe\u5728\u6642\u523b\u3092\u53d6\u5f97\r\n            current_time = time.time()\r\n\r\n            # \u6700\u5f8c\u306b\u4fdd\u5b58\u3057\u3066\u304b\u30895\u5206\u7d4c\u904e\u3057\u305f\u304b\u78ba\u8a8d\r\n            if current_time - last_saved_time >= save_interval:\r\n                # \u753b\u50cf\u3092PNG\u5f62\u5f0f\u3067\u4fdd\u5b58\r\n                filename = os.path.join(save_path, f\"saved_image_{int(current_time)}.png\")\r\n                cv2.imwrite(filename, cropped_frame)\r\n                print(f\"Saved: {filename}\")\r\n\r\n                # \u6700\u5f8c\u306b\u4fdd\u5b58\u3057\u305f\u6642\u523b\u3092\u66f4\u65b0\r\n                last_saved_time = current_time\r\n\r\n            # \u30ad\u30fc\u64cd\u4f5c\u3092\u78ba\u8a8d\r\n            if cv2.waitKey(1) & 0xFF == ord('q'):\r\n                break\r\n\r\n    # \u7d42\u4e86\u51e6\u7406\r\n    capture.release()\r\n    cv2.destroyAllWindows()\r\n\r\n<\/pre>\n<blockquote class=\"wp-embedded-content\" data-secret=\"eI8X0GdiPh\"><p><a href=\"https:\/\/www.tetsumag.com\/2023\/02\/25\/310\/\">\u3010YOLO\u3011\u7c21\u6613\u30a2\u30ce\u30c6\u30fc\u30b7\u30e7\u30f3\u306b\u3064\u3044\u3066\u3010\u7269\u4f53\u691c\u77e5\u3011<\/a><\/p><\/blockquote>\n<p><iframe class=\"wp-embedded-content\" sandbox=\"allow-scripts\" security=\"restricted\" style=\"position: absolute; clip: rect(1px, 1px, 1px, 1px);\" title=\"&#8220;\u3010YOLO\u3011\u7c21\u6613\u30a2\u30ce\u30c6\u30fc\u30b7\u30e7\u30f3\u306b\u3064\u3044\u3066\u3010\u7269\u4f53\u691c\u77e5\u3011&#8221; &#8212; \u3066\u3064\u307e\u3050\" src=\"https:\/\/www.tetsumag.com\/2023\/02\/25\/310\/embed\/#?secret=GG6NozJBIz#?secret=eI8X0GdiPh\" data-secret=\"eI8X0GdiPh\" width=\"500\" height=\"282\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\"><\/iframe><\/p>\n<h3><span class=\"ez-toc-section\" id=\"%E7%89%A9%E4%BD%93%E6%A4%9C%E7%9F%A5%E3%83%A2%E3%83%87%E3%83%AB%E3%82%92%E9%81%A9%E7%94%A8%E3%81%99%E3%82%8B\"><\/span>\u7269\u4f53\u691c\u77e5\u30e2\u30c7\u30eb\u3092\u9069\u7528\u3059\u308b<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u6700\u5f8c\u306b\u3001\u7269\u4f53\u691c\u77e5\u30e2\u30c7\u30eb\u3092\u5c0e\u5165\u3057\u3001\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u3067\u7269\u4f53\u3092\u691c\u77e5\u3057\u307e\u3057\u3087\u3046\u3002<\/p>\n<p>YoloV5\u30e2\u30c7\u30eb\u306a\u3069\u306e\u5b66\u7fd2\u6e08\u307f\u30e2\u30c7\u30eb\u3060\u3051\u3067\u306f\u306a\u304f\u3001\u72ec\u81ea\u306e\u81ea\u793e\u88fd\u54c1\u3092\u691c\u77e5\u3057\u305f\u3044\u5834\u5408\u306f\u3001\u81ea\u5206\u3067\u30e2\u30c7\u30eb\u3092\u5b66\u7fd2\u3055\u305b\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" title=\"\">\r\n\r\n\"\"\"\r\nlaunch_web_camera.py\u3068test_yolov5.py\u3092\u7d44\u307f\u5408\u308f\u305b\u308b\u3053\u3068\u3067\u3001\r\n\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u306b\u691c\u77e5\u3067\u304d\u308b\u30b7\u30b9\u30c6\u30e0\u304c\u3067\u304d\u307e\u3059\u3002\r\n\r\n\"\"\"\r\nimport glob\r\nimport shutil\r\n\r\nimport torch\r\nimport cv2\r\n\r\n# \u30e1\u30fc\u30eb\u306e\u9001\u4fe1\r\nfrom launch_RTSPweb_camera import rtsp_url\r\nfrom mail import send_mail\r\n\r\ndef detect_img(model, image):\r\n    # \u63a8\u8ad6\u306e\u5b9f\u884c\r\n    model.conf = 0.6  # confidence threshold (0-1)\r\n    results = model(image)\r\n\r\n    # \u7d50\u679c\u3092\u8fd4\u3059\r\n    return results\r\n\r\ndef add_result(image, results, x, y):\r\n    # \u7d50\u679c\u304b\u3089\u691c\u51fa\u3055\u308c\u305f\u7269\u4f53\u306e\u540d\u524d\u3092\u53d6\u5f97\u3059\u308b\r\n    results_name = [row[\"name\"] for ind, row in results.pandas().xyxy[0].iterrows()]\r\n    # \u30ea\u30b9\u30c8\u306b\u3042\u308b\u91cd\u8907\u3092\u30ab\u30a6\u30f3\u30c8\u3059\u308b\r\n    results_count = {i: results_name.count(i) for i in results_name}\r\n    str = \"\"\r\n    offset = 0\r\n    for key in results_count.keys():\r\n        str = f\"{key}:{results_count[key]}\"\r\n        # \u6587\u5b57\u3092\u8ffd\u52a0\u3059\u308b\r\n        image = cv2.putText(image, str, (x, y+offset), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 2)\r\n        offset+=30\r\n    return image\r\n\r\nif __name__ == '__main__':\r\n    weights_dir = \"weights\/best.pt\"\r\n    model = torch.hub.load('yolov5', 'custom', path=weights_dir, source='local')\r\n    # model = torch.hub.load('ultralytics\/yolov5', 'yolov5s', pretrained=True)\r\n\r\n    capture = cv2.VideoCapture(rtsp_url)\r\n\r\n    while (True):\r\n        ret, frame = capture.read()\r\n        if ret:\r\n\r\n            # \u4f4d\u7f6e\u691c\u51fa\r\n            frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)\r\n            results = detect_img(model, frame)\r\n            # \u7d50\u679c\u4fdd\u5b58\r\n            results.save(save_dir=\"result\")\r\n            # \u7d50\u679c\u8aad\u307f\u8fbc\u307f\r\n            img = cv2.cvtColor(cv2.imread(\"result\/image0.jpg\"), cv2.COLOR_BGR2RGB)\r\n            shutil.rmtree(\"result\")\r\n            # \u6587\u5b57\u306e\u8ffd\u52a0\r\n            img = add_result(img, results, 10, 30)\r\n            # \u7d50\u679c\u8868\u793a\r\n            results.print()\r\n            cv2.imshow('camera', img)\r\n            if cv2.waitKey(1) & 0xFF == ord('q'):\r\n                break\r\n\r\n    capture.release()\r\n    cv2.destroyAllWindows()\r\n\r\n<\/pre>\n<blockquote class=\"wp-embedded-content\" data-secret=\"YQ44Hgo1oN\"><p><a href=\"https:\/\/www.tetsumag.com\/2020\/07\/15\/33\/\">AI\u306b\u3088\u308b\u90e8\u8cc7\u6750\uff08\u9244\u7b4b\uff09\u306e\u500b\u6570\u30ab\u30a6\u30f3\u30c8\u306b\u3064\u3044\u3066\u8ab2\u984c\u304b\u3089\u958b\u767a\u624b\u9806\u307e\u3067\u89e3\u8aac\uff01<\/a><\/p><\/blockquote>\n<p><iframe class=\"wp-embedded-content\" sandbox=\"allow-scripts\" security=\"restricted\" style=\"position: absolute; clip: rect(1px, 1px, 1px, 1px);\" title=\"&#8220;AI\u306b\u3088\u308b\u90e8\u8cc7\u6750\uff08\u9244\u7b4b\uff09\u306e\u500b\u6570\u30ab\u30a6\u30f3\u30c8\u306b\u3064\u3044\u3066\u8ab2\u984c\u304b\u3089\u958b\u767a\u624b\u9806\u307e\u3067\u89e3\u8aac\uff01&#8221; &#8212; \u3066\u3064\u307e\u3050\" src=\"https:\/\/www.tetsumag.com\/2020\/07\/15\/33\/embed\/#?secret=10nfBwVOkh#?secret=YQ44Hgo1oN\" data-secret=\"YQ44Hgo1oN\" width=\"500\" height=\"282\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\"><\/iframe><\/p>\n<h2><span class=\"ez-toc-section\" id=\"%E3%81%BE%E3%81%A8%E3%82%81\"><\/span>\u307e\u3068\u3081<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u3053\u306e\u8a18\u4e8b\u3067\u306f\u3001RTSP\u30ab\u30e1\u30e9\u3092\u6d3b\u7528\u3057\u305f\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u7269\u4f53\u691c\u77e5AI\u306e\u69cb\u7bc9\u624b\u9806\u3092\u7d39\u4ecb\u3057\u307e\u3057\u305f\u3002<\/p>\n<p>\u500b\u3005\u306e\u30cb\u30fc\u30ba\u306b\u5408\u308f\u305b\u3066\u3001\u3053\u306e\u30b7\u30b9\u30c6\u30e0\u3092\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3057\u3066\u307f\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<p><a href=\"https:\/\/www.udemy.com\/course\/tetsumag-objectdetection\/?couponCode=KASOKU001\" target=\"_blank\" rel=\"noopener\"><img decoding=\"async\" loading=\"lazy\" src=\"http:\/\/www.tetsumag.com\/wp-content\/uploads\/2024\/01\/\u7269\u4f53\u691c\u77e5AI-\uff08\u7d0d\u54c1\uff09.gif\" alt=\"\" width=\"1600\" height=\"900\" class=\"aligncenter size-full wp-image-15516\" \/><\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u3053\u306e\u8a18\u4e8b\u306f\u3001RTSP\uff08Real-Time Streaming Protocol\uff09\u5bfe\u5fdc\u306e\u30ab\u30e1\u30e9\u3092\u4f7f\u7528\u3057\u3066\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u7269\u4f53\u691c\u77e5AI\u3092\u69cb\u7bc9\u3059\u308b\u65b9\u6cd5\u306b\u3064\u3044\u3066\u8a73\u3057\u304f\u8aac\u660e\u3057\u3066\u3044\u307e\u3059\u3002 \u3010Python\u3011\u30ab\u30e1\u30e9\u306b\u6620\u3063\u305f\u753b\u50cf\u3092\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0 &hellip;<\/p>\n<p class=\"read-more\"> <a class=\"\" href=\"https:\/\/tetsumag.com\/blog\/2024\/01\/30\/377\/\"> <span class=\"screen-reader-text\">RTSP\u30ab\u30e1\u30e9\u3092\u4f7f\u3063\u305f\u7269\u4f53\u691c\u77e5AI\u306e\u69cb\u7bc9\u30ac\u30a4\u30c9<\/span> \u3082\u3063\u3068\u8aad\u3080 &raquo;<\/a><\/p>\n","protected":false},"author":1,"featured_media":15696,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"default","ast-global-header-display":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","theme-transparent-header-meta":"default","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","_themeisle_gutenberg_block_has_review":false},"categories":[127],"tags":[113],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/tetsumag.com\/blog\/wp-json\/wp\/v2\/posts\/15675"}],"collection":[{"href":"https:\/\/tetsumag.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/tetsumag.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/tetsumag.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/tetsumag.com\/blog\/wp-json\/wp\/v2\/comments?post=15675"}],"version-history":[{"count":15,"href":"https:\/\/tetsumag.com\/blog\/wp-json\/wp\/v2\/posts\/15675\/revisions"}],"predecessor-version":[{"id":15704,"href":"https:\/\/tetsumag.com\/blog\/wp-json\/wp\/v2\/posts\/15675\/revisions\/15704"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/tetsumag.com\/blog\/wp-json\/wp\/v2\/media\/15696"}],"wp:attachment":[{"href":"https:\/\/tetsumag.com\/blog\/wp-json\/wp\/v2\/media?parent=15675"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/tetsumag.com\/blog\/wp-json\/wp\/v2\/categories?post=15675"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/tetsumag.com\/blog\/wp-json\/wp\/v2\/tags?post=15675"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}