{"id":1311,"date":"2023-03-27T20:59:52","date_gmt":"2023-03-27T11:59:52","guid":{"rendered":"https:\/\/fukugyouhistory.tokyo\/?p=1311"},"modified":"2023-03-28T10:05:35","modified_gmt":"2023-03-28T01:05:35","slug":"python%e3%80%80opencv%e3%82%92%e5%ad%a6%e7%bf%92%e3%81%97%e3%81%a6%e3%81%bf%e3%81%9f%e3%80%80","status":"publish","type":"post","link":"https:\/\/fukugyouhistory.tokyo\/?p=1311","title":{"rendered":"Python\u3000OpenCV\u3092\u5b66\u7fd2\u3057\u3066\u307f\u305f\u3000"},"content":{"rendered":"\n<p><a href=\"https:\/\/opencv.org\/\" target=\"_blank\" rel=\"noreferrer noopener\">OpenCV(Open Source Computer Vision Library)<\/a>\u306f\u3001\u753b\u50cf\u3084\u52d5\u753b\u306e\u51e6\u7406\u306b\u5fc5\u8981\u306a\u6a5f\u80fd\u3092\u69d8\u3005\u306b\u63d0\u4f9b\u3059\u308b\u30e9\u30a4\u30d6\u30e9\u30ea\u3067\u3059\u3002\u753b\u50cf\u306e\u5909\u63db\u3084\u30d5\u30a3\u30eb\u30bf\u51e6\u7406\u3084\u5909\u5f62\u3001\u7269\u4f53\u5224\u5b9a\u3084\u7269\u4f53\u8a8d\u8b58\u3084\u9854\u8a8d\u8b58\u3001\u30ab\u30e1\u30e9\u306e\u5165\u51fa\u529b\u306a\u3069\u8c4a\u5bcc\u306a\u6a5f\u80fd\u304c\u3042\u308a\u3001\u3068\u3066\u3082\u4fbf\u5229\u3067\u3059\u3002<\/p>\n\n\n\n<!--more-->\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">OpenCV\u3067\u753b\u50cf\u306e\u8aad\u307f\u8fbc\u307f\u30fb\u5909\u63db\u3092\u3057\u3066\u307f\u308b<\/h2>\n\n\n\n<p>\u4ee5\u524d\u306b<a rel=\"noreferrer noopener\" href=\"https:\/\/fukugyouhistory.tokyo\/?p=995\" target=\"_blank\">Stable Diffusion\u306e\u8a18\u4e8b<\/a>\u3067\u4f7f\u7528\u3057\u305f\u753b\u50cf\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002<br>\u300csample.png\u300d\u3068\u3057\u3066\u4fdd\u5b58\u3057\u3066\u304a\u304d\u307e\u3057\u3087\u3046\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img decoding=\"async\" sizes=\"(max-width: 512px) 100vw, 512px\" src=\"https:\/\/fukugyouhistory.tokyo\/wp-content\/uploads\/2023\/03\/image-240.png\" alt=\"\" class=\"wp-image-1024\" width=\"345\" height=\"345\" srcset=\"https:\/\/fukugyouhistory.tokyo\/wp-content\/uploads\/2023\/03\/image-240.png 512w, https:\/\/fukugyouhistory.tokyo\/wp-content\/uploads\/2023\/03\/image-240-300x300.png 300w, https:\/\/fukugyouhistory.tokyo\/wp-content\/uploads\/2023\/03\/image-240-150x150.png 150w\" \/><\/figure>\n\n\n\n<p>\u8aad\u307f\u51fa\u3057\u305f\u753b\u50cf\u306e\u30c7\u30fc\u30bf\u306e\u9ad8\u3055\u30fb\u5e45\u30fb\u8272\u306e\u60c5\u5831\u3092\u8868\u793a\u3057\u3066\u307f\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u4e0b\u8a18\u306e\u7d50\u679c\u306e\u8272\u300c3\u300d\u306f [B,G,R]\uff1d[0,0,0]\uff5e[255,255,255] \u3092\u610f\u5473\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import cv2\n\nimg = cv2.imread(\"sample.png\")\nprint(img.shape)<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img data-dominant-color=\"f2f2f2\" data-has-transparency=\"true\" style=\"--dominant-color: #f2f2f2;\" decoding=\"async\" sizes=\"(max-width: 361px) 100vw, 361px\" src=\"https:\/\/fukugyouhistory.tokyo\/wp-content\/uploads\/2023\/03\/image-191.png\" alt=\"\" class=\"wp-image-1325 has-transparency\" width=\"314\" height=\"95\" srcset=\"https:\/\/fukugyouhistory.tokyo\/wp-content\/uploads\/2023\/03\/image-191.png 361w, https:\/\/fukugyouhistory.tokyo\/wp-content\/uploads\/2023\/03\/image-191-300x91.png 300w\" \/><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>\u8d64\u8272\u3060\u3051\u306b\u3057\u305f\u3044\u5834\u5408\u306f\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u3059\u308b\u3068\u53ef\u80fd\u3067\u3059\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import cv2\n\nimg = cv2.imread(\"sample.png\")\n\n# &#91;B,G,R]\u306eB,G\u306e\u5024\u3092\u30bc\u30ed\u306b\nimg&#91;:, :, (0, 1)] = 0\n\n# \u30d5\u30a1\u30a4\u30eb\u306b\u4fdd\u5b58\ncv2.imwrite(\"sample_red.png\", img)\n\nfrom IPython.display import Image,display_png\ndisplay_png(Image(\"sample_red.png\"))<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img data-dominant-color=\"660000\" data-has-transparency=\"false\" style=\"--dominant-color: #660000;\" decoding=\"async\" sizes=\"(max-width: 512px) 100vw, 512px\" src=\"https:\/\/fukugyouhistory.tokyo\/wp-content\/uploads\/2023\/03\/image-195.png\" alt=\"\" class=\"wp-image-1347 not-transparent\" width=\"332\" height=\"332\" srcset=\"https:\/\/fukugyouhistory.tokyo\/wp-content\/uploads\/2023\/03\/image-195.png 512w, https:\/\/fukugyouhistory.tokyo\/wp-content\/uploads\/2023\/03\/image-195-300x300.png 300w, https:\/\/fukugyouhistory.tokyo\/wp-content\/uploads\/2023\/03\/image-195-150x150.png 150w\" \/><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>\u30b0\u30ec\u30fc\u30b9\u30b1\u30fc\u30eb\u5909\u63db\u3092\u3057\u3066\u307f\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import cv2\n\nimg = cv2.imread(\"sample.png\")\n# \u30b0\u30ec\u30a4\u30b9\u30b1\u30fc\u30eb\u306b\u5909\u63db\ngry = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)\n# \u30d5\u30a1\u30a4\u30eb\u306b\u4fdd\u5b58\ncv2.imwrite(\"sample_gry.png\", gry)\n\nfrom IPython.display import Image,display_png\ndisplay_png(Image(\"sample_gry.png\"))<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img data-dominant-color=\"757575\" data-has-transparency=\"false\" style=\"--dominant-color: #757575;\" decoding=\"async\" sizes=\"(max-width: 512px) 100vw, 512px\" src=\"https:\/\/fukugyouhistory.tokyo\/wp-content\/uploads\/2023\/03\/image-192.png\" alt=\"\" class=\"wp-image-1327 not-transparent\" width=\"372\" height=\"372\" srcset=\"https:\/\/fukugyouhistory.tokyo\/wp-content\/uploads\/2023\/03\/image-192.png 512w, https:\/\/fukugyouhistory.tokyo\/wp-content\/uploads\/2023\/03\/image-192-300x300.png 300w, https:\/\/fukugyouhistory.tokyo\/wp-content\/uploads\/2023\/03\/image-192-150x150.png 150w\" \/><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>\u30bd\u30fc\u30d9\u30eb\u30d5\u30a3\u30eb\u30bf\u30fc\u30fbCanny\u30d5\u30a3\u30eb\u30bf\uff08\u5171\u306b\u30a8\u30c3\u30b8\u691c\u51fa\uff09\u3001\u30cd\u30ac\u30dd\u30b8\u53cd\u8ee2\u30012\u5024\u753b\u50cf\u30fb\u8f2a\u90ed\u306e\u63cf\u753b\u3092\u3057\u3066\u307f\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import cv2\n\nimg = cv2.imread(\"sample.png\")\n\n# \u30bd\u30fc\u30d9\u30eb\u30d5\u30a3\u30eb\u30bf\u3092\u9069\u7528\nsobel = cv2.Sobel(img, cv2.CV_32F, 1, 0, ksize=5)\n# \u30d5\u30a1\u30a4\u30eb\u306b\u4fdd\u5b58\ncv2.imwrite(\"sample_sobel.png\", sobel)\n\n# Canny\u30d5\u30a3\u30eb\u30bf\u3092\u9069\u7528\ncanny = cv2.Canny(img, 30, 200)\n# \u767d\u9ed2\u53cd\u8ee2\ncanny = 255 - canny\n# \u30d5\u30a1\u30a4\u30eb\u306b\u4fdd\u5b58\ncv2.imwrite(\"sample_canny.png\", canny)\n\n# \u30cd\u30ac\u30dd\u30b8\u53cd\u8ee2\nnega = cv2.bitwise_not(img)\n# \u767d\u9ed2\u53cd\u8ee2\u3067\u3082\u540c\u3058\u7d50\u679c\u304c\u5f97\u3089\u308c\u307e\u3059\u3002\n#nega = 255 - img\n# \u30d5\u30a1\u30a4\u30eb\u306b\u4fdd\u5b58\ncv2.imwrite(\"sample_nega.png\", nega)\n\n# 2\u5024\u753b\u50cf\u306e\u4f5c\u6210\ngry = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)\nret, thresh = cv2.threshold(gry, 100, 255, cv2.THRESH_BINARY)\n# \u30d5\u30a1\u30a4\u30eb\u306b\u4fdd\u5b58\ncv2.imwrite(\"sample_thresh.png\", thresh)\n\n# 2\u5024\u753b\u50cf\u3092\u5143\u306b\u8f2a\u90ed\u306e\u63cf\u753b\n# \u8f2a\u90ed\u306e\u62bd\u51fa\ncontours, hierarchy = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)\ncts = cv2.drawContours(img, contours, -1, color=(0,255,0), thickness=2)\n# \u30d5\u30a1\u30a4\u30eb\u306b\u4fdd\u5b58\ncv2.imwrite(\"sample_contours.png\", cts)\n\nfrom IPython.display import Image,display_png\ndisplay_png(Image(\"sample_sobel.png\"))\ndisplay_png(Image(\"sample_canny.png\"))\ndisplay_png(Image(\"sample_nega.png\"))\ndisplay_png(Image(\"sample_thresh.png\"))\ndisplay_png(Image(\"sample_contours.png\"))<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img data-dominant-color=\"423f3d\" data-has-transparency=\"false\" style=\"--dominant-color: #423f3d;\" decoding=\"async\" sizes=\"(max-width: 512px) 100vw, 512px\" src=\"https:\/\/fukugyouhistory.tokyo\/wp-content\/uploads\/2023\/03\/image-193-jpg.webp\" alt=\"\" class=\"wp-image-1329 not-transparent\" width=\"376\" height=\"376\" srcset=\"https:\/\/fukugyouhistory.tokyo\/wp-content\/uploads\/2023\/03\/image-193-jpg.webp 512w, https:\/\/fukugyouhistory.tokyo\/wp-content\/uploads\/2023\/03\/image-193-300x300.webp 300w, https:\/\/fukugyouhistory.tokyo\/wp-content\/uploads\/2023\/03\/image-193-150x150.webp 150w\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img data-dominant-color=\"dedede\" data-has-transparency=\"false\" style=\"--dominant-color: #dedede;\" decoding=\"async\" sizes=\"(max-width: 512px) 100vw, 512px\" src=\"https:\/\/fukugyouhistory.tokyo\/wp-content\/uploads\/2023\/03\/image-193.png\" alt=\"\" class=\"wp-image-1330 not-transparent\" width=\"380\" height=\"380\" srcset=\"https:\/\/fukugyouhistory.tokyo\/wp-content\/uploads\/2023\/03\/image-193.png 512w, https:\/\/fukugyouhistory.tokyo\/wp-content\/uploads\/2023\/03\/image-193-300x300.png 300w, https:\/\/fukugyouhistory.tokyo\/wp-content\/uploads\/2023\/03\/image-193-150x150.png 150w\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img data-dominant-color=\"99808f\" data-has-transparency=\"false\" style=\"--dominant-color: #99808f;\" decoding=\"async\" sizes=\"(max-width: 512px) 100vw, 512px\" src=\"https:\/\/fukugyouhistory.tokyo\/wp-content\/uploads\/2023\/03\/image-194-jpg.webp\" alt=\"\" class=\"wp-image-1331 not-transparent\" width=\"382\" height=\"382\" srcset=\"https:\/\/fukugyouhistory.tokyo\/wp-content\/uploads\/2023\/03\/image-194-jpg.webp 512w, https:\/\/fukugyouhistory.tokyo\/wp-content\/uploads\/2023\/03\/image-194-300x300.webp 300w, https:\/\/fukugyouhistory.tokyo\/wp-content\/uploads\/2023\/03\/image-194-150x150.webp 150w\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img data-dominant-color=\"969696\" data-has-transparency=\"false\" style=\"--dominant-color: #969696;\" decoding=\"async\" sizes=\"(max-width: 512px) 100vw, 512px\" src=\"https:\/\/fukugyouhistory.tokyo\/wp-content\/uploads\/2023\/03\/image-194.png\" alt=\"\" class=\"wp-image-1338 not-transparent\" width=\"389\" height=\"389\" srcset=\"https:\/\/fukugyouhistory.tokyo\/wp-content\/uploads\/2023\/03\/image-194.png 512w, https:\/\/fukugyouhistory.tokyo\/wp-content\/uploads\/2023\/03\/image-194-300x300.png 300w, https:\/\/fukugyouhistory.tokyo\/wp-content\/uploads\/2023\/03\/image-194-150x150.png 150w\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img data-dominant-color=\"5a8f66\" data-has-transparency=\"false\" style=\"--dominant-color: #5a8f66;\" decoding=\"async\" sizes=\"(max-width: 512px) 100vw, 512px\" src=\"https:\/\/fukugyouhistory.tokyo\/wp-content\/uploads\/2023\/03\/image-195-jpg.webp\" alt=\"\" class=\"wp-image-1339 not-transparent\" width=\"392\" height=\"392\" srcset=\"https:\/\/fukugyouhistory.tokyo\/wp-content\/uploads\/2023\/03\/image-195-jpg.webp 512w, https:\/\/fukugyouhistory.tokyo\/wp-content\/uploads\/2023\/03\/image-195-300x300.webp 300w, https:\/\/fukugyouhistory.tokyo\/wp-content\/uploads\/2023\/03\/image-195-150x150.webp 150w\" \/><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">OpenCV\u3067Web\u30ab\u30e1\u30e9\u306e\u753b\u50cf\u3092\u53d6\u308a\u8fbc\u3093\u3067\u307f\u308b<\/h2>\n\n\n\n<p>OpenCV\u3092\u4f7f\u7528\u3059\u308b\u3068\u3001\u7c21\u5358\u306bWeb\u30ab\u30e1\u30e9\u306e\u753b\u50cf\u3092\u53d6\u308a\u8fbc\u3080\u3053\u3068\u304c\u53ef\u80fd\u3067\u3059\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import cv2\n\n# \u30ab\u30e1\u30e9\u306e\u30ad\u30e3\u30d7\u30c1\u30e3\u3092\u958b\u59cb\ncap = cv2.VideoCapture(0)\n\nwhile True:\n    # 1\u30d5\u30ec\u30fc\u30e0\u305a\u3064\u53d6\u5f97\u3059\u308b\u3002\n    ret, frame = cap.read()\n\n    #\u30d5\u30ec\u30fc\u30e0\u304c\u53d6\u5f97\u3067\u304d\u306a\u304b\u3063\u305f\u5834\u5408\u306f\u3001\u753b\u9762\u3092\u9589\u3058\u308b\n    if not ret:\n        break\n    \n    # \u30a6\u30a3\u30f3\u30c9\u30a6\u306b\u51fa\u529b\n    cv2.imshow(\"Frame - Press ESC or ENTER to exit.\", frame)\n    # 10ms\u9593\u9694\u3067\u66f4\u65b0\u3059\u308b\n    key = cv2.waitKey(1)\n\n    # Esc\u30ad\u30fc\u3092\u5165\u529b\u3055\u308c\u305f\u3089\u753b\u9762\u3092\u9589\u3058\u308b\n    if key == 27:\n        break\n\n    # Enter\u30ad\u30fc\u3092\u5165\u529b\u3055\u308c\u305f\u3089\u753b\u9762\u3092\u9589\u3058\u308b\n    if key == 13:\n        break\n\n# \u5f8c\u51e6\u7406\ncap.release()\ncv2.destroyAllWindows()<\/code><\/pre>\n\n\n\n<p>\u753b\u50cf\u304c\u8868\u793a\u3055\u308c\u305f\u30a6\u30a4\u30f3\u30c9\u30a6\u3067Esc\u30ad\u30fc\u307e\u305f\u306fEnter\u30ad\u30fc\u3092\u62bc\u3059\u3068\u7d42\u4e86\u3055\u305b\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u53d6\u5f97\u3057\u305f\u753b\u50cf\uff08\u5909\u6570frame\uff09\u306b\u5148\u307b\u3069\u7d39\u4ecb\u3057\u305f\u5909\u63db\u51e6\u7406\u3092\u52a0\u3048\u3066\u3001\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u306b\u898b\u308b\u3053\u3068\u3082\u53ef\u80fd\u3067\u3059\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img data-dominant-color=\"76726f\" data-has-transparency=\"false\" style=\"--dominant-color: #76726f;\" decoding=\"async\" sizes=\"(max-width: 642px) 100vw, 642px\" src=\"https:\/\/fukugyouhistory.tokyo\/wp-content\/uploads\/2023\/03\/image-194-1-jpg.webp\" alt=\"\" class=\"wp-image-1333 not-transparent\" width=\"390\" height=\"311\" srcset=\"https:\/\/fukugyouhistory.tokyo\/wp-content\/uploads\/2023\/03\/image-194-1-jpg.webp 642w, https:\/\/fukugyouhistory.tokyo\/wp-content\/uploads\/2023\/03\/image-194-1-300x239.webp 300w\" \/><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">OpenCV\u3067Web\u30ab\u30e1\u30e9\u306e\u52d5\u4f53\u691c\u77e5\u3092\u5b9f\u65bd\u3059\u308b<\/h2>\n\n\n\n<p>Web\u30ab\u30e1\u30e9\u306e\u753b\u50cf\u306b\u3001\u65e5\u4ed8\u3068\u30e2\u30fc\u30b7\u30e7\u30f3\u30d5\u30a1\u30af\u30bf\u30fc\uff08\u5168\u4f53\u306e\u5909\u5316\u3057\u305f\u5272\u5408\uff09\u3092\u8868\u793a\u3055\u305b\u3066\u3044\u307e\u3059\u3002<br>\u30e2\u30fc\u30b7\u30e7\u30f3\u30d5\u30a1\u30af\u30bf\u30fc\u304c\u95be\u5024\u4ee5\u4e0a\u306b\u306a\u308b\u3068\u3001\u305d\u306e\u6642\u306e\u753b\u50cf\u3092\u4fdd\u5b58\u3059\u308b\u4ed5\u7d44\u307f\u306b\u306a\u3063\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u30a6\u30a4\u30f3\u30c9\u30a6\u753b\u9762\u306b\u306f\u3001\u691c\u77e5\u3057\u305f\u6642\u306b\u300cDETECTED\u300d\u3068\u8d64\u6587\u5b57\u304c\u51fa\u308b\u3088\u3046\u306b\u3057\u307e\u3057\u305f\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import datetime\nimport cv2\n\n# \u753b\u50cf\u3092\u4fdd\u5b58\u3059\u308b\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\nsave_dir  = '.\/image\/'\n\n# \u30d5\u30a1\u30a4\u30eb\u540d\u306f\u300c\u65e5\u4ed8\u6642\u523b + fn_suffix\u300d\u306b\u3059\u308b\u3002\nfn_suffix = 'motion_detect.jpg'\n\n# \u30ab\u30e1\u30e9\u306e\u30ad\u30e3\u30d7\u30c1\u30e3\u3092\u958b\u59cb\ncap = cv2.VideoCapture(0)\n\n# \u7e26\u3068\u6a2a\u306e\u89e3\u50cf\u5ea6\u6307\u5b9a\ncap.set(cv2.CAP_PROP_FRAME_WIDTH, 640)\ncap.set(cv2.CAP_PROP_FRAME_HEIGHT, 480)\n\n# \u5404\u30c9\u30c3\u30c8\u306e\u5909\u5316\u3092\u691c\u77e5\u3059\u308b\u3057\u304d\u3044\u5024\nDOT_TH = 20\n\n# \u30e2\u30fc\u30b7\u30e7\u30f3\u30d5\u30a1\u30af\u30bf\u30fc(\u3069\u308c\u304f\u3089\u3044\u306e\u70b9\u306b\u5909\u5316\u304c\u3042\u3063\u305f\u304b)\u304c\n# \u3069\u306e\u7a0b\u5ea6\u4ee5\u4e0a\u306a\u3089\u8a18\u9332\u3059\u308b\u304b\u3002\uff080.0\uff5e1.0\uff09\nMOTHON_FACTOR_TH = 0.20\n\n# \u6bd4\u8f03\u7528\u306e\u30c7\u30fc\u30bf\u3092\u683c\u7d0d\navg = None\n\nwhile True:\n\n    # 1\u30d5\u30ec\u30fc\u30e0\u305a\u3064\u53d6\u5f97\u3059\u308b\u3002\n    ret, frame = cap.read()\n\n    # \u30d5\u30ec\u30fc\u30e0\u304c\u53d6\u5f97\u3067\u304d\u306a\u304b\u3063\u305f\u5834\u5408\u306f\u3001\u753b\u9762\u3092\u9589\u3058\u308b\n    if not ret:\n        break\n    # \u30c7\u30fc\u30bf\u3092\u53d6\u5f97\u3057\u305f\u6642\u523b\n    dt_now = datetime.datetime.now()\n\n    # \u30d5\u30a1\u30a4\u30eb\u540d\u3068\u753b\u50cf\u4e2d\u306b\u57cb\u3081\u8fbc\u3080\u65e5\u4ed8\u6642\u523b\n    datetime_str = dt_now.strftime('%Y-%m-%d %H:%M:%S') \n    f_name = dt_now.strftime('%Y%m%d%H%M%S%f') + \"_\" + fn_suffix\n\n    # \u30e2\u30ce\u30af\u30ed\u306b\u3059\u308b\n    gray = cv2.cvtColor(frame, cv.COLOR_BGR2GRAY)\n\n    # \u6bd4\u8f03\u57fa\u6e96\u7528\u306e\u30d5\u30ec\u30fc\u30e0\u3092\u53d6\u5f97\u3059\u308b\n    if avg is None:\n        avg = gray.copy().astype(\"float\")\n        continue\n\n    #\u300cavg = (1 - 0.2) * avg + 0.2 * gray\u300d\u3067\u79fb\u52d5\u5e73\u5747\u3092\u66f4\u65b0\n    cv2.accumulateWeighted(gray, avg, 0.2)\n    # \u73fe\u5728\u306e\u30d5\u30ec\u30fc\u30e0\u3068\u79fb\u52d5\u5e73\u5747\u3068\u306e\u5dee\u3092\u8a08\u7b97\n    frameDelta = cv2.absdiff(gray, cv.convertScaleAbs(avg))\n\n    # \u30c7\u30eb\u30bf\u753b\u50cf\u3092\u95be\u5024\u51e6\u7406\u3092\u884c\u3046\uff08\u5dee\u306e\u6709\u7121\u30672\u5024\u753b\u50cf\u3092\u4f5c\u6210\uff09\n    thresh = cv2.threshold(frameDelta, DOT_TH, 255, cv.THRESH_BINARY)&#91;1]\n\n    # \u30e2\u30fc\u30b7\u30e7\u30f3\u30d5\u30a1\u30af\u30bf\u30fc\u3092\u8a08\u7b97\uff08\u5168\u4f53\u3068\u3057\u3066\u3069\u308c\u304f\u3089\u3044\u306e\u5272\u5408\u304c\u5909\u5316\u3057\u305f\u304b\uff09\n    motion_factor = thresh.sum() * 1.0 \/ thresh.size \/ DELTA_MAX \n    motion_factor_str = '{:.08f}'.format(motion_factor)\n\n    # \u753b\u50cf\u306b\u65e5\u4ed8\u6642\u523b\u3092\u66f8\u304d\u8fbc\u307f\n    cv2.putText(frame,datetime_str,(25,50),cv.FONT_HERSHEY_SIMPLEX, 1.0,(255,255,255), 2)\n    # \u753b\u50cf\u306bmotion_factor\u5024\u3092\u66f8\u304d\u8fbc\u3080\n    cv2.putText(frame,motion_factor_str,(25,470),cv.FONT_HERSHEY_SIMPLEX, 1.0,(255,255,255), 2)\n\n    # \u30e2\u30fc\u30b7\u30e7\u30f3\u30d5\u30a1\u30af\u30bf\u30fc\u304c\u3057\u304d\u3044\u5024\u3092\u8d85\u3048\u3066\u3044\u308c\u3070\u52d5\u304d\u3092\u691c\u77e5\u3057\u305f\u3053\u3068\u306b\u3059\u308b\n    if motion_factor &gt; MOTHON_FACTOR_TH:\n        # \u30d5\u30a1\u30a4\u30eb\u306b\u4fdd\u5b58\n        cv2.imwrite(save_dir + f_name, frame)\n        print(\"DETECTED:\" + f_name)\n        \n        # \u753b\u50cf\u306b\u691c\u77e5\u3057\u305f\u65e8\u306e\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u66f8\u304d\u8fbc\u3080\n        cv2.putText(frame,\"DETECTED\",(400,470),cv.FONT_HERSHEY_SIMPLEX, 1.0,(0,0,255), 2)\n\n    # \u30a6\u30a3\u30f3\u30c9\u30a6\u306b\u51fa\u529b\n    cv2.imshow('Frame - Press ESC or ENTER to exit.', frame)\n\n    # 10ms\u9593\u9694\u3067\u66f4\u65b0\u3059\u308b\n    key = cv2.waitKey(10)\n\n    # Esc\u30ad\u30fc\u3092\u5165\u529b\u3055\u308c\u305f\u3089\u753b\u9762\u3092\u9589\u3058\u308b\n    if key == 27:\n        break\n\n    # Enter\u30ad\u30fc\u3092\u5165\u529b\u3055\u308c\u305f\u3089\u753b\u9762\u3092\u9589\u3058\u308b\n    if key == 13:\n        break\n\n# \u5f8c\u51e6\u7406\ncap.release()\ncv2.destroyAllWindows()<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img data-dominant-color=\"79726f\" data-has-transparency=\"false\" style=\"--dominant-color: #79726f;\" decoding=\"async\" sizes=\"(max-width: 642px) 100vw, 642px\" src=\"https:\/\/fukugyouhistory.tokyo\/wp-content\/uploads\/2023\/03\/image-195-1-jpg.webp\" alt=\"\" class=\"wp-image-1341 not-transparent\" width=\"424\" height=\"339\" srcset=\"https:\/\/fukugyouhistory.tokyo\/wp-content\/uploads\/2023\/03\/image-195-1-jpg.webp 642w, https:\/\/fukugyouhistory.tokyo\/wp-content\/uploads\/2023\/03\/image-195-1-300x239.webp 300w\" \/><figcaption class=\"wp-element-caption\">\u691c\u77e5\u3057\u305f\u6642\u306e\u30a6\u30a4\u30f3\u30c9\u30a6\u753b\u9762<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img data-dominant-color=\"736c69\" data-has-transparency=\"false\" style=\"--dominant-color: #736c69;\" decoding=\"async\" sizes=\"(max-width: 640px) 100vw, 640px\" src=\"https:\/\/fukugyouhistory.tokyo\/wp-content\/uploads\/2023\/03\/20230327205134955364_motion_detect-jpg.webp\" alt=\"\" class=\"wp-image-1342 not-transparent\" width=\"427\" height=\"320\" srcset=\"https:\/\/fukugyouhistory.tokyo\/wp-content\/uploads\/2023\/03\/20230327205134955364_motion_detect-jpg.webp 640w, https:\/\/fukugyouhistory.tokyo\/wp-content\/uploads\/2023\/03\/20230327205134955364_motion_detect-300x225.webp 300w\" \/><figcaption class=\"wp-element-caption\">\u691c\u77e5\u3057\u305f\u6642\u306b\u4fdd\u5b58\u3055\u308c\u305f\u753b\u50cf<\/figcaption><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>\u753b\u50cf\u3092\u4fdd\u5b58\u3059\u308b\u3060\u3051\u3067\u306f\u306a\u304f\u3001\u30e1\u30fc\u30eb\u3092\u98db\u3070\u3057\u305f\u308a\u3001\u30a2\u30e9\u30fc\u30e0\u3092\u9cf4\u3089\u3057\u305f\u308a\u3082\u3067\u304d\u305d\u3046\u3067\u3059\u3002<br>\u3053\u3046\u3044\u3046\u4fbf\u5229\u306a\u30e9\u30a4\u30d6\u30e9\u30ea\u304c\u7121\u6599\u3067\u4f7f\u3048\u308b\u306a\u3093\u3066\u3001\u3059\u3054\u3044\u3067\u3059\u306d\u3002<\/p>\n\n\n\n<p>\u3068\u308a\u3042\u3048\u305a\u3001\u3053\u3053\u307e\u3067\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>OpenCV(Open Source Computer Vision Library)\u306f\u3001\u753b\u50cf\u3084\u52d5\u753b\u306e\u51e6\u7406\u306b\u5fc5\u8981\u306a\u6a5f\u80fd\u3092\u69d8\u3005\u306b\u63d0\u4f9b\u3059\u308b\u30e9\u30a4\u30d6\u30e9\u30ea\u3067\u3059\u3002\u753b\u50cf\u306e\u5909\u63db\u3084\u30d5\u30a3\u30eb\u30bf\u51e6\u7406\u3084\u5909\u5f62\u3001\u7269\u4f53\u5224\u5b9a\u3084\u7269\u4f53\u8a8d\u8b58\u3084\u9854\u8a8d\u8b58\u3001\u30ab\u30e1\u30e9\u306e\u5165 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8],"tags":[],"class_list":{"0":"post-1311","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-python"},"_links":{"self":[{"href":"https:\/\/fukugyouhistory.tokyo\/index.php?rest_route=\/wp\/v2\/posts\/1311","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fukugyouhistory.tokyo\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fukugyouhistory.tokyo\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fukugyouhistory.tokyo\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fukugyouhistory.tokyo\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1311"}],"version-history":[{"count":17,"href":"https:\/\/fukugyouhistory.tokyo\/index.php?rest_route=\/wp\/v2\/posts\/1311\/revisions"}],"predecessor-version":[{"id":1391,"href":"https:\/\/fukugyouhistory.tokyo\/index.php?rest_route=\/wp\/v2\/posts\/1311\/revisions\/1391"}],"wp:attachment":[{"href":"https:\/\/fukugyouhistory.tokyo\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1311"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fukugyouhistory.tokyo\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1311"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fukugyouhistory.tokyo\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1311"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}