{"id":5766,"date":"2024-11-29T17:11:44","date_gmt":"2024-11-29T08:11:44","guid":{"rendered":"https:\/\/blog.smartlight.co.jp\/?p=5766"},"modified":"2024-11-29T17:11:45","modified_gmt":"2024-11-29T08:11:45","slug":"paspberry-pi%e3%81%aeai%e3%82%ab%e3%83%a1%e3%83%a9-imx500%e3%82%92%e3%81%84%e3%81%98%e3%81%a3%e3%81%a6%e3%81%bf%e3%81%9f","status":"publish","type":"post","link":"https:\/\/blog.smartlight.co.jp\/?p=5766","title":{"rendered":"Paspberry Pi\u306eAI\u30ab\u30e1\u30e9 IMX500\u3092\u3044\u3058\u3063\u3066\u307f\u305f"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">\u30c7\u30d0\u30a4\u30b9<\/h2>\n\n\n\n<p>\u4eca\u56de\u4f7f\u3063\u305f\u30c7\u30d0\u30a4\u30b9\u306f\u3001Sony\u306e\u30e9\u30ba\u30d1\u30a4\u30ab\u30e1\u30e9IMX500\u3068\u3044\u3046\u3082\u306e\u3067\u3059\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"4032\" height=\"3024\" src=\"https:\/\/blog.smartlight.co.jp\/wp-content\/uploads\/2024\/11\/image-edited.png\" alt=\"\" class=\"wp-image-5768\" style=\"width:571px;height:auto\" srcset=\"https:\/\/blog.smartlight.co.jp\/wp-content\/uploads\/2024\/11\/image-edited.png 4032w, https:\/\/blog.smartlight.co.jp\/wp-content\/uploads\/2024\/11\/image-edited-300x225.png 300w, https:\/\/blog.smartlight.co.jp\/wp-content\/uploads\/2024\/11\/image-edited-1024x768.png 1024w, https:\/\/blog.smartlight.co.jp\/wp-content\/uploads\/2024\/11\/image-edited-768x576.png 768w, https:\/\/blog.smartlight.co.jp\/wp-content\/uploads\/2024\/11\/image-edited-1536x1152.png 1536w, https:\/\/blog.smartlight.co.jp\/wp-content\/uploads\/2024\/11\/image-edited-2048x1536.png 2048w, https:\/\/blog.smartlight.co.jp\/wp-content\/uploads\/2024\/11\/image-edited.png 856w\" sizes=\"auto, (max-width: 4032px) 100vw, 4032px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">\u5199\u771f\u3092\u64ae\u3063\u3066\u307f\u308b<\/h2>\n\n\n\n<p>\u3067\u306f\u65e9\u901f\u5199\u771f\u3092\u64ae\u3063\u3066\u3044\u304d\u307e\u3059\u3002\u30e9\u30ba\u30d1\u30a4\u3078\u306e\u63a5\u7d9a\u30a4\u30e1\u30fc\u30b8\u306f\u4e0b\u56f3\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"4032\" height=\"3024\" src=\"https:\/\/blog.smartlight.co.jp\/wp-content\/uploads\/2024\/11\/image-1-edited.png\" alt=\"\" class=\"wp-image-5770\" srcset=\"https:\/\/blog.smartlight.co.jp\/wp-content\/uploads\/2024\/11\/image-1-edited.png 4032w, https:\/\/blog.smartlight.co.jp\/wp-content\/uploads\/2024\/11\/image-1-edited-300x225.png 300w, https:\/\/blog.smartlight.co.jp\/wp-content\/uploads\/2024\/11\/image-1-edited-1024x768.png 1024w, https:\/\/blog.smartlight.co.jp\/wp-content\/uploads\/2024\/11\/image-1-edited-768x576.png 768w, https:\/\/blog.smartlight.co.jp\/wp-content\/uploads\/2024\/11\/image-1-edited-1536x1152.png 1536w, https:\/\/blog.smartlight.co.jp\/wp-content\/uploads\/2024\/11\/image-1-edited-2048x1536.png 2048w, https:\/\/blog.smartlight.co.jp\/wp-content\/uploads\/2024\/11\/image-1-edited.png 856w\" sizes=\"auto, (max-width: 4032px) 100vw, 4032px\" \/><\/figure>\n\n\n\n<p>\u63a5\u7d9a\u3057\u305f\u3089\u3001\u30e9\u30ba\u30d1\u30a4\u5185\u306b\u30d5\u30a9\u30eb\u30c0\u30fc\u3092\u4f5c\u308a\u307e\u3059\u3002\u30c6\u30ad\u30b9\u30c8\u3092\u4f5c\u308a\u4e0b\u8a18\u306e\u30b3\u30fc\u30c9\u3092\u30da\u30fc\u30b9\u30c8\u3057\u3001\u30d5\u30a9\u30eb\u30c0\u30fc\u540d\u3092cam_test.py\u306b\u3057\u307e\u3059\u3002<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">from picamera2 import Picamera2\nimport cv2\nimport paho.mqtt.client <span class=\"hljs-keyword\">as<\/span> mqtt\nimport json\n\n<span class=\"hljs-comment\"># MQTT\u30d6\u30ed\u30fc\u30ab\u30fc\u306e\u8a2d\u5b9a<\/span>\nbroker = <span class=\"hljs-string\">\"localhost\"<\/span>\nport = <span class=\"hljs-number\">1883<\/span>\ntopic = <span class=\"hljs-string\">\"camera\/faces\"<\/span>\n\n<span class=\"hljs-comment\"># MQTT\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306e\u8a2d\u5b9a<\/span>\nclient = mqtt.Client()\n\n<span class=\"hljs-comment\"># \u30b3\u30cd\u30af\u30b7\u30e7\u30f3\u306e\u30b3\u30fc\u30eb\u30d0\u30c3\u30af\u95a2\u6570\uff08\u63a5\u7d9a\u5f8c\u306b\u547c\u3070\u308c\u308b\uff09<\/span>\ndef on_connect(client, userdata, flags, rc):\n    <span class=\"hljs-keyword\">print<\/span>(f<span class=\"hljs-string\">\"Connected with result code {rc}\"<\/span>)\n    <span class=\"hljs-comment\"># \u30c7\u30fc\u30bf\u3092Publish<\/span>\n    client.publish(topic, json.dumps(face_count))  <span class=\"hljs-comment\"># JSON\u3092\u6587\u5b57\u5217\u3068\u3057\u3066\u9001\u4fe1<\/span>\n    <span class=\"hljs-keyword\">print<\/span>(f<span class=\"hljs-string\">\"Data published to topic {topic}\"<\/span>)\n\n<span class=\"hljs-comment\"># \u30ab\u30e1\u30e9\u3092\u521d\u671f\u5316<\/span>\ncamera = Picamera2()\ncamera.configure(camera.create_preview_configuration(main={<span class=\"hljs-string\">\"format\"<\/span>: <span class=\"hljs-string\">'XRGB8888'<\/span>, <span class=\"hljs-string\">\"size\"<\/span>: (<span class=\"hljs-number\">640<\/span>, <span class=\"hljs-number\">480<\/span>)}))\n\n<span class=\"hljs-comment\"># \u30ab\u30e1\u30e9\u3092\u958b\u59cb<\/span>\ncamera.start()\n\n<span class=\"hljs-comment\"># \u753b\u50cf\u3092\u30ad\u30e3\u30d7\u30c1\u30e3<\/span>\nimg = camera.capture_array()\n\n<span class=\"hljs-comment\"># \u30ab\u30e1\u30e9\u3092\u505c\u6b62<\/span>\ncamera.stop()\n\n<span class=\"hljs-comment\"># \u9854\u691c\u51fa\u5668\u3092\u521d\u671f\u5316<\/span>\nface_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + <span class=\"hljs-string\">'haarcascade_frontalface_default.xml'<\/span>)\n\n<span class=\"hljs-comment\"># \u30e2\u30c7\u30eb\u304c\u6b63\u3057\u304f\u8aad\u307f\u8fbc\u307e\u308c\u3066\u3044\u308b\u304b\u78ba\u8a8d<\/span>\n<span class=\"hljs-keyword\">if<\/span> face_cascade.<span class=\"hljs-keyword\">empty<\/span>():\n    <span class=\"hljs-keyword\">print<\/span>(<span class=\"hljs-string\">\"\u9854\u691c\u51fa\u30e2\u30c7\u30eb\u304c\u8aad\u307f\u8fbc\u307e\u308c\u3066\u3044\u307e\u305b\u3093\u3002\"<\/span>)\n    <span class=\"hljs-keyword\">exit<\/span>()\n\n<span class=\"hljs-comment\"># \u30b0\u30ec\u30fc\u30b9\u30b1\u30fc\u30eb\u5909\u63db<\/span>\ngray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)\n\n<span class=\"hljs-comment\"># \u9854\u3092\u691c\u51fa<\/span>\nfaces = face_cascade.detectMultiScale(gray, scaleFactor=<span class=\"hljs-number\">1.1<\/span>, minNeighbors=<span class=\"hljs-number\">5<\/span>, minSize=(<span class=\"hljs-number\">30<\/span>, <span class=\"hljs-number\">30<\/span>))\n\nface_count = len(faces)\n\n<span class=\"hljs-keyword\">print<\/span>(f<span class=\"hljs-string\">\"\u691c\u51fa\u3055\u308c\u305f\u9854\u306e\u6570: {face_count}\"<\/span>)\n\n<span class=\"hljs-comment\"># \u691c\u51fa\u3057\u305f\u9854\u3092\u63cf\u753b<\/span>\n<span class=\"hljs-keyword\">for<\/span> (x, y, w, h) in faces:\n    cv2.rectangle(img, (x, y), (x + w, y + h), (<span class=\"hljs-number\">255<\/span>, <span class=\"hljs-number\">0<\/span>, <span class=\"hljs-number\">0<\/span>), <span class=\"hljs-number\">2<\/span>)\n\n<span class=\"hljs-comment\"># \u753b\u50cf\u3092\u4fdd\u5b58<\/span>\n<span class=\"hljs-keyword\">if<\/span> not cv2.imwrite(<span class=\"hljs-string\">'test2.jpg'<\/span>, img):\n    <span class=\"hljs-keyword\">print<\/span>(<span class=\"hljs-string\">\"test2.jpg \u306e\u4fdd\u5b58\u306b\u5931\u6557\u3057\u307e\u3057\u305f\u3002\"<\/span>)\n    <span class=\"hljs-keyword\">exit<\/span>()\n\n<span class=\"hljs-keyword\">print<\/span>(<span class=\"hljs-string\">\"\u9854\u691c\u51fa\u5f8c\u306e\u753b\u50cf\u304c\u4fdd\u5b58\u3055\u308c\u307e\u3057\u305f: test2.jpg\"<\/span>)\n\n<span class=\"hljs-comment\"># MQTT\u30d6\u30ed\u30fc\u30ab\u30fc\u3078\u306e\u63a5\u7d9a<\/span>\nclient.on_connect = on_connect  <span class=\"hljs-comment\"># \u63a5\u7d9a\u6642\u306b\u547c\u3070\u308c\u308b\u30b3\u30fc\u30eb\u30d0\u30c3\u30af\u95a2\u6570\u3092\u8a2d\u5b9a<\/span>\nclient.connect(broker, port, <span class=\"hljs-number\">60<\/span>)  <span class=\"hljs-comment\"># \u30d6\u30ed\u30fc\u30ab\u30fc\u306eIP\u3068\u30dd\u30fc\u30c8\u3092\u6307\u5b9a<\/span>\n\n<span class=\"hljs-comment\"># \u30eb\u30fc\u30d7\u3092\u958b\u59cb\u3057\u3066\u3001\u63a5\u7d9a\u3068\u30e1\u30c3\u30bb\u30fc\u30b8\u9001\u4fe1\u3092\u5f85\u6a5f<\/span>\nclient.loop_start()\n\n<span class=\"hljs-comment\"># MQTT\u51e6\u7406\u3092\u7d42\u4e86\u3059\u308b\u5834\u5408\uff08\u51e6\u7406\u304c\u5b8c\u4e86\u3057\u305f\u5f8c\u306b\u547c\u3073\u51fa\u3059\uff09<\/span>\nclient.loop_stop()\nclient.disconnect()<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>\u305d\u3046\u3057\u307e\u3057\u305f\u3089\u3001terminal\u3067\u300cpython3 \u52d5\u4f5c\u3057\u305f\u3044\u30d5\u30a9\u30eb\u30c0\u30fc\u300d\u3092\u547c\u3073\u307e\u3059\u3002\u4eca\u56de\u306f\u300cpython3 cam_test.py\u300d\u3068\u6253\u3061\u307e\u3059\u3002<br>\u3059\u308b\u3068\u30ab\u30e1\u30e9\u304c\u5199\u771f\u3092\u64ae\u308a\u3001\u6307\u5b9a\u3057\u305f\u30d5\u30a9\u30eb\u30c0\u30fc\u306b\u4fdd\u5b58\u3055\u308c\u307e\u3059\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"489\" src=\"https:\/\/blog.smartlight.co.jp\/wp-content\/uploads\/2024\/11\/image-2-1024x489.png\" alt=\"\" class=\"wp-image-5771\" srcset=\"https:\/\/blog.smartlight.co.jp\/wp-content\/uploads\/2024\/11\/image-2-1024x489.png 1024w, https:\/\/blog.smartlight.co.jp\/wp-content\/uploads\/2024\/11\/image-2-300x143.png 300w, https:\/\/blog.smartlight.co.jp\/wp-content\/uploads\/2024\/11\/image-2-768x367.png 768w, https:\/\/blog.smartlight.co.jp\/wp-content\/uploads\/2024\/11\/image-2.png 1474w, https:\/\/blog.smartlight.co.jp\/wp-content\/uploads\/2024\/11\/image-2-1024x489.png 856w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>\u30d5\u30a1\u30a4\u30eb\u306e\u4fdd\u5b58\u5148\u306f\u3001\u30b3\u30fc\u30c9\u306e# \u753b\u50cf\u3092\u4fdd\u5b58<br>if not cv2.imwrite(&#8216;test2.jpg&#8217;, img):<br>print(&#8220;test2.jpg \u306e\u4fdd\u5b58\u306b\u5931\u6557\u3057\u307e\u3057\u305f\u3002&#8221;)<br>exit()<br>\u306e\u90e8\u5206\u3067\u6c7a\u3081\u3066\u3044\u307e\u3059\u3002<br>\u3053\u306e\u90e8\u5206\u3092\u5909\u3048\u308b\u3053\u3068\u3067\u4fdd\u5b58\u5148\u3092\u5909\u3048\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u6b21\u306b\u3001\u3082\u30461\u3064\u30c6\u30ad\u30b9\u30c8\u3092\u4f5c\u308a\u4e0b\u8a18\u306e\u30b3\u30fc\u30c9\u3092\u30b3\u30d4\u30fc\u3057\u3001\u540d\u524d\u3092\u300ccam_cars.py\u300d\u3068\u3044\u3046\u30d5\u30a9\u30eb\u30c0\u30fc\u306b\u3057\u307e\u3059\u3002<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">import cv2\nimport paho.mqtt.client <span class=\"hljs-keyword\">as<\/span> mqtt\nimport json\n\n<span class=\"hljs-comment\"># MQTT\u30d6\u30ed\u30fc\u30ab\u30fc\u306e\u8a2d\u5b9a<\/span>\nbroker = <span class=\"hljs-string\">\"localhost\"<\/span>\nport = <span class=\"hljs-number\">1883<\/span>\ntopic = <span class=\"hljs-string\">\"camera\/cars\"<\/span>\n\n<span class=\"hljs-comment\"># MQTT\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306e\u8a2d\u5b9a<\/span>\nclient = mqtt.Client()\n\n<span class=\"hljs-comment\"># \u30b3\u30cd\u30af\u30b7\u30e7\u30f3\u306e\u30b3\u30fc\u30eb\u30d0\u30c3\u30af\u95a2\u6570\uff08\u63a5\u7d9a\u5f8c\u306b\u547c\u3070\u308c\u308b\uff09<\/span>\ndef on_connect(client, userdata, flags, rc):\n    <span class=\"hljs-keyword\">print<\/span>(f<span class=\"hljs-string\">\"Connected with result code {rc}\"<\/span>)\n    <span class=\"hljs-comment\"># \u30c7\u30fc\u30bf\u3092Publish<\/span>\n    client.publish(topic, json.dumps(car_count))  <span class=\"hljs-comment\"># JSON\u3092\u6587\u5b57\u5217\u3068\u3057\u3066\u9001\u4fe1<\/span>\n    <span class=\"hljs-keyword\">print<\/span>(f<span class=\"hljs-string\">\"Data published to topic {topic}\"<\/span>)\n\n<span class=\"hljs-comment\"># \u8eca\u691c\u51fa\u5668\u3092\u521d\u671f\u5316<\/span>\ncar_cascade = cv2.CascadeClassifier(<span class=\"hljs-string\">'haarcascade_car.xml'<\/span>)  <span class=\"hljs-comment\"># \u30e2\u30c7\u30eb\u30d5\u30a1\u30a4\u30eb\u306e\u30d1\u30b9\u3092\u6307\u5b9a<\/span>\n\n<span class=\"hljs-comment\"># \u30e2\u30c7\u30eb\u304c\u6b63\u3057\u304f\u8aad\u307f\u8fbc\u307e\u308c\u3066\u3044\u308b\u304b\u78ba\u8a8d<\/span>\n<span class=\"hljs-keyword\">if<\/span> car_cascade.<span class=\"hljs-keyword\">empty<\/span>():\n    <span class=\"hljs-keyword\">print<\/span>(<span class=\"hljs-string\">\"\u8eca\u691c\u51fa\u30e2\u30c7\u30eb\u304c\u8aad\u307f\u8fbc\u307e\u308c\u3066\u3044\u307e\u305b\u3093\u3002\"<\/span>)\n    <span class=\"hljs-keyword\">exit<\/span>()\n\n<span class=\"hljs-comment\"># \u753b\u50cf\u3092\u8aad\u307f\u8fbc\u3080\uff08\u4e8b\u524d\u306b\u753b\u50cf\u304c\u3042\u308b\u3053\u3068\u304c\u524d\u63d0\uff09<\/span>\nimg = cv2.imread(<span class=\"hljs-string\">'parking.jpg'<\/span>)\n<span class=\"hljs-keyword\">if<\/span> img is None:\n    <span class=\"hljs-keyword\">print<\/span>(<span class=\"hljs-string\">\"parking.jpg \u306e\u8aad\u307f\u8fbc\u307f\u306b\u5931\u6557\u3057\u307e\u3057\u305f\u3002\"<\/span>)\n    <span class=\"hljs-keyword\">exit<\/span>()\n\n<span class=\"hljs-comment\"># \u30b0\u30ec\u30fc\u30b9\u30b1\u30fc\u30eb\u5909\u63db<\/span>\ngray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)\n\n<span class=\"hljs-comment\"># \u8eca\u3092\u691c\u51fa scaleFactor=\u691c\u51fa\u5206\u6bcd\u3068\u601d\u3063\u3066\u5927\u4e08\u592b\u3001minNeighbors=\u91cd\u306a\u3063\u305f\u90e8\u5206\u306b\u3064\u3044\u3066\u3001\u30b5\u30a4\u30ba\u306fpx\u6570\u3092\u53c2\u7167<\/span>\ncars = car_cascade.detectMultiScale(gray, scaleFactor=<span class=\"hljs-number\">1.008<\/span>, minNeighbors=<span class=\"hljs-number\">1<\/span>, minSize=(<span class=\"hljs-number\">70<\/span>, <span class=\"hljs-number\">70<\/span>), maxSize=(<span class=\"hljs-number\">115<\/span>, <span class=\"hljs-number\">115<\/span>))\n\ncar_count = len(cars)\n\n<span class=\"hljs-keyword\">print<\/span>(f<span class=\"hljs-string\">\"\u691c\u51fa\u3055\u308c\u305f\u8eca\u306e\u6570: {car_count}\"<\/span>)\n\n<span class=\"hljs-comment\"># \u691c\u51fa\u3057\u305f\u8eca\u3092\u63cf\u753b<\/span>\n<span class=\"hljs-keyword\">for<\/span> (x, y, w, h) in cars:\n    cv2.rectangle(img, (x, y), (x + w, y + h), (<span class=\"hljs-number\">0<\/span>, <span class=\"hljs-number\">255<\/span>, <span class=\"hljs-number\">0<\/span>), <span class=\"hljs-number\">2<\/span>)  <span class=\"hljs-comment\"># \u8eca\u3092\u7dd1\u8272\u306e\u77e9\u5f62\u3067\u63cf\u753b<\/span>\n\n<span class=\"hljs-comment\"># \u753b\u50cf\u3092\u4fdd\u5b58<\/span>\n<span class=\"hljs-keyword\">if<\/span> not cv2.imwrite(<span class=\"hljs-string\">'test3.jpg'<\/span>, img):\n    <span class=\"hljs-keyword\">print<\/span>(<span class=\"hljs-string\">\"test3.jpg \u306e\u4fdd\u5b58\u306b\u5931\u6557\u3057\u307e\u3057\u305f\u3002\"<\/span>)\n    <span class=\"hljs-keyword\">exit<\/span>()\n\n<span class=\"hljs-keyword\">print<\/span>(<span class=\"hljs-string\">\"\u8eca\u691c\u51fa\u5f8c\u306e\u753b\u50cf\u304c\u4fdd\u5b58\u3055\u308c\u307e\u3057\u305f: test3.jpg\"<\/span>)\n\n\n<span class=\"hljs-comment\"># MQTT\u30d6\u30ed\u30fc\u30ab\u30fc\u3078\u306e\u63a5\u7d9a<\/span>\nclient.on_connect = on_connect  <span class=\"hljs-comment\"># \u63a5\u7d9a\u6642\u306b\u547c\u3070\u308c\u308b\u30b3\u30fc\u30eb\u30d0\u30c3\u30af\u95a2\u6570\u3092\u8a2d\u5b9a<\/span>\nclient.connect(broker, port, <span class=\"hljs-number\">60<\/span>)  <span class=\"hljs-comment\"># \u30d6\u30ed\u30fc\u30ab\u30fc\u306eIP\u3068\u30dd\u30fc\u30c8\u3092\u6307\u5b9a<\/span>\n\n<span class=\"hljs-comment\"># \u30eb\u30fc\u30d7\u3092\u958b\u59cb\u3057\u3066\u3001\u63a5\u7d9a\u3068\u30e1\u30c3\u30bb\u30fc\u30b8\u9001\u4fe1\u3092\u5f85\u6a5f<\/span>\nclient.loop_start()\n\n<span class=\"hljs-comment\"># MQTT\u51e6\u7406\u3092\u7d42\u4e86\u3059\u308b\u5834\u5408\uff08\u51e6\u7406\u304c\u5b8c\u4e86\u3057\u305f\u5f8c\u306b\u547c\u3073\u51fa\u3059\uff09<\/span>\nclient.loop_stop()\nclient.disconnect()<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>\u3053\u306e\u30b3\u30fc\u30c9\u306f\u3001\u4fdd\u5b58\u3055\u308c\u305f\u753b\u50cf\u304b\u3089\u8eca\u3092\u691c\u51fa\u3059\u308b\u3068\u3044\u3046\u5185\u5bb9\u306b\u306a\u308a\u307e\u3059\u3002<br>\u3069\u3053\u304b\u3089\u304b\u8eca\u306e\u753b\u50cf\u3092\u7528\u610f\u3057\u3001\u8aad\u307f\u8fbc\u3080\u30d5\u30a1\u30a4\u30eb\u3092\u6307\u5b9a\u3057\u3066\u3042\u3052\u307e\u3059\u3002\uff08\u6307\u5b9a\u5834\u6240\u306f\u4e0b\u8a18\u53c2\u7167\uff09<br># \u753b\u50cf\u3092\u8aad\u307f\u8fbc\u3080\uff08\u4e8b\u524d\u306b\u753b\u50cf\u304c\u3042\u308b\u3053\u3068\u304c\u524d\u63d0\uff09<br>img = cv2.imread(&#8216;\u8aad\u307f\u8fbc\u3080\u30d5\u30a1\u30a4\u30eb\u540d&#8217;)<br>if img is None:<br>    print(&#8220;\u8aad\u307f\u8fbc\u3080\u30d5\u30a1\u30a4\u30eb\u540d \u306e\u8aad\u307f\u8fbc\u307f\u306b\u5931\u6557\u3057\u307e\u3057\u305f\u3002&#8221;)<br>    exit()<br>\u3053\u308c\u3067\u3001terminal\u3067\u52d5\u4f5c\u3092\u304b\u3051\u308b\u3068\u3001\u8eca\u500b\u691c\u51fa\u6570\u3068\u753b\u50cf\u306e\u4fdd\u5b58\u5148\u304c\u8fd4\u3063\u3066\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"497\" src=\"https:\/\/blog.smartlight.co.jp\/wp-content\/uploads\/2024\/11\/image-3-1024x497.png\" alt=\"\" class=\"wp-image-5772\" srcset=\"https:\/\/blog.smartlight.co.jp\/wp-content\/uploads\/2024\/11\/image-3-1024x497.png 1024w, https:\/\/blog.smartlight.co.jp\/wp-content\/uploads\/2024\/11\/image-3-300x146.png 300w, https:\/\/blog.smartlight.co.jp\/wp-content\/uploads\/2024\/11\/image-3-768x373.png 768w, https:\/\/blog.smartlight.co.jp\/wp-content\/uploads\/2024\/11\/image-3.png 1470w, https:\/\/blog.smartlight.co.jp\/wp-content\/uploads\/2024\/11\/image-3-1024x497.png 856w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>\u4ed6\u306b\u3082\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3084QR\u30b3\u30fc\u30c9\u306a\u3069\u306e\u691c\u51fa\u3082\u3067\u304d\u307e\u3057\u305f\u3002<\/p>\n\n\n\n<p>\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u691c\u51fa<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">from picamera2 import Picamera2\nimport paho.mqtt.client <span class=\"hljs-keyword\">as<\/span> mqtt\nimport json\nimport cv2\n\n<span class=\"hljs-comment\"># YOLO\u30e2\u30c7\u30eb\u306e\u30d1\u30b9\u8a2d\u5b9a<\/span>\nmodel_cfg = <span class=\"hljs-string\">\"\/home\/pi\/yolo\/yolov3.cfg\"<\/span>  <span class=\"hljs-comment\"># YOLO\u306e\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb<\/span>\nmodel_weights = <span class=\"hljs-string\">\"\/home\/pi\/yolo\/yolov3.weights\"<\/span>  <span class=\"hljs-comment\"># YOLO\u306e\u91cd\u307f\u30d5\u30a1\u30a4\u30eb<\/span>\nclass_names_file = <span class=\"hljs-string\">\"\/home\/pi\/yolo\/coco.names\"<\/span>  <span class=\"hljs-comment\"># \u691c\u51fa\u3059\u308b\u30af\u30e9\u30b9\u540d<\/span>\n\n<span class=\"hljs-comment\"># \u30af\u30e9\u30b9\u540d\u3092\u8aad\u307f\u8fbc\u3080<\/span>\nwith open(class_names_file, <span class=\"hljs-string\">'r'<\/span>) <span class=\"hljs-keyword\">as<\/span> f:\n    class_names = f.read().strip().split(<span class=\"hljs-string\">'\\n'<\/span>)\n\n<span class=\"hljs-comment\"># YOLO\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u306e\u8aad\u307f\u8fbc\u307f<\/span>\nnet = cv2.dnn.readNetFromDarknet(model_cfg, model_weights)\nnet.setPreferableBackend(cv2.dnn.DNN_BACKEND_OPENCV)\nnet.setPreferableTarget(cv2.dnn.DNN_TARGET_CPU)\n\n<span class=\"hljs-comment\"># MQTT\u30d6\u30ed\u30fc\u30ab\u30fc\u306e\u8a2d\u5b9a<\/span>\nbroker = <span class=\"hljs-string\">\"localhost\"<\/span>\nport = <span class=\"hljs-number\">1883<\/span>\ntopic = <span class=\"hljs-string\">\"camera\/objects\"<\/span>\n\n<span class=\"hljs-comment\"># MQTT\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306e\u8a2d\u5b9a<\/span>\nclient = mqtt.Client()\n\n<span class=\"hljs-comment\"># \u30b3\u30cd\u30af\u30b7\u30e7\u30f3\u306e\u30b3\u30fc\u30eb\u30d0\u30c3\u30af\u95a2\u6570\uff08\u63a5\u7d9a\u5f8c\u306b\u547c\u3070\u308c\u308b\uff09<\/span>\ndef on_connect(client, userdata, flags, rc):\n    <span class=\"hljs-keyword\">print<\/span>(f<span class=\"hljs-string\">\"Connected with result code {rc}\"<\/span>)\n    <span class=\"hljs-comment\"># \u30c7\u30fc\u30bf\u3092Publish<\/span>\n    client.publish(topic, json.dumps(read_objects))  <span class=\"hljs-comment\"># JSON\u3092\u6587\u5b57\u5217\u3068\u3057\u3066\u9001\u4fe1<\/span>\n    <span class=\"hljs-keyword\">print<\/span>(f<span class=\"hljs-string\">\"Data published to topic {topic}\"<\/span>)\n\n<span class=\"hljs-comment\"># \u30ab\u30e1\u30e9\u3092\u521d\u671f\u5316<\/span>\ncamera = Picamera2()\ncamera.configure(camera.create_preview_configuration(main={<span class=\"hljs-string\">\"format\"<\/span>: <span class=\"hljs-string\">'XRGB8888'<\/span>, <span class=\"hljs-string\">\"size\"<\/span>: (<span class=\"hljs-number\">2028<\/span>, <span class=\"hljs-number\">1520<\/span>)}))\n\n<span class=\"hljs-comment\"># \u30ab\u30e1\u30e9\u3092\u958b\u59cb<\/span>\ncamera.start()\n\n<span class=\"hljs-comment\"># \u753b\u50cf\u3092\u30ad\u30e3\u30d7\u30c1\u30e3<\/span>\nimage = camera.capture_array()\n\n<span class=\"hljs-comment\"># \u30ab\u30e1\u30e9\u3092\u505c\u6b62<\/span>\ncamera.stop()\n\n<span class=\"hljs-comment\"># \u753b\u50cf\u3092RGB\u306b\u5909\u63db\uff08\u30c1\u30e3\u30f3\u30cd\u30eb\u30923\u306b\u3059\u308b\uff09<\/span>\nimage_rgb = cv2.cvtColor(image, cv2.COLOR_RGBA2RGB)\n\n<span class=\"hljs-comment\"># YOLO\u7269\u4f53\u691c\u51fa\u51e6\u7406<\/span>\nblob = cv2.dnn.blobFromImage(image_rgb, <span class=\"hljs-number\">0.00392<\/span>, (<span class=\"hljs-number\">416<\/span>, <span class=\"hljs-number\">416<\/span>), (<span class=\"hljs-number\">0<\/span>, <span class=\"hljs-number\">0<\/span>, <span class=\"hljs-number\">0<\/span>), <span class=\"hljs-keyword\">True<\/span>, crop=<span class=\"hljs-keyword\">False<\/span>)\n\n<span class=\"hljs-comment\"># \u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u306b\u5165\u529b<\/span>\nnet.setInput(blob)\n\n<span class=\"hljs-comment\"># \u51fa\u529b\u5c64\u3092\u53d6\u5f97<\/span>\nlayer_names = net.getLayerNames()\noutput_layers = &#91;layer_names&#91;i - <span class=\"hljs-number\">1<\/span>] <span class=\"hljs-keyword\">for<\/span> i in net.getUnconnectedOutLayers()]\n\n<span class=\"hljs-comment\"># \u7269\u4f53\u691c\u51fa<\/span>\nlayer_outputs = net.forward(output_layers)\n\n<span class=\"hljs-comment\"># \u691c\u51fa\u7d50\u679c\u3092\u89e3\u6790<\/span>\nboxes = &#91;]\nconfidences = &#91;]\nclass_ids = &#91;]\nh, w = image.shape&#91;:<span class=\"hljs-number\">2<\/span>]\n\n<span class=\"hljs-keyword\">for<\/span> output in layer_outputs:\n    <span class=\"hljs-keyword\">for<\/span> detection in output:\n        scores = detection&#91;<span class=\"hljs-number\">5<\/span>:]\n        class_id = int(scores.argmax())\n        confidence = scores&#91;class_id]\n        <span class=\"hljs-keyword\">if<\/span> confidence &gt; <span class=\"hljs-number\">0.5<\/span>:  <span class=\"hljs-comment\"># \u4fe1\u983c\u5ea6\u95be\u5024<\/span>\n            <span class=\"hljs-comment\"># \u691c\u51fa\u3055\u308c\u305f\u7269\u4f53\u306e\u5ea7\u6a19<\/span>\n            center_x, center_y, box_w, box_h = (detection&#91;<span class=\"hljs-number\">0<\/span>:<span class=\"hljs-number\">4<\/span>] * &#91;w, h, w, h]).astype(<span class=\"hljs-string\">\"int\"<\/span>)\n            x = int(center_x - box_w \/ <span class=\"hljs-number\">2<\/span>)\n            y = int(center_y - box_h \/ <span class=\"hljs-number\">2<\/span>)\n            \n            <span class=\"hljs-comment\"># \u30d0\u30a6\u30f3\u30c7\u30a3\u30f3\u30b0\u30dc\u30c3\u30af\u30b9\u3092\u683c\u7d0d<\/span>\n            boxes.append(&#91;x, y, box_w, box_h])\n            confidences.append(float(confidence))\n            class_ids.append(class_id)\n\n<span class=\"hljs-comment\"># NMS\u3092\u9069\u7528\u3057\u3066\u91cd\u8907\u3059\u308b\u691c\u51fa\u3092\u524a\u9664<\/span>\nindices = cv2.dnn.NMSBoxes(boxes, confidences, score_threshold=<span class=\"hljs-number\">0.5<\/span>, nms_threshold=<span class=\"hljs-number\">0.4<\/span>)\n\n<span class=\"hljs-comment\"># \u691c\u51fa\u7d50\u679c\u3092\u63cf\u753b<\/span>\nread_objects = &#91;]\n\n<span class=\"hljs-keyword\">if<\/span> len(indices) &gt; <span class=\"hljs-number\">0<\/span>:\n    <span class=\"hljs-keyword\">for<\/span> i in indices.flatten():\n        x, y, w, h = boxes&#91;i]\n        label = class_names&#91;class_ids&#91;i]]\n        confidence = confidences&#91;i]\n        \n        <span class=\"hljs-comment\"># \u691c\u51fa\u7d50\u679c\u3092\u4fdd\u5b58<\/span>\n        read_objects.append({\n            <span class=\"hljs-string\">\"object\"<\/span>: label,\n            <span class=\"hljs-string\">\"confidence\"<\/span>: float(confidence)\n        })\n        \n        <span class=\"hljs-comment\"># \u30d0\u30a6\u30f3\u30c7\u30a3\u30f3\u30b0\u30dc\u30c3\u30af\u30b9\u3092\u63cf\u753b<\/span>\n        cv2.rectangle(image, (x, y), (x + w, y + h), (<span class=\"hljs-number\">0<\/span>, <span class=\"hljs-number\">255<\/span>, <span class=\"hljs-number\">0<\/span>), <span class=\"hljs-number\">2<\/span>)\n        text = f<span class=\"hljs-string\">\"{label}: {confidence:.2f}\"<\/span>\n        cv2.putText(image, text, (x, y - <span class=\"hljs-number\">5<\/span>), cv2.FONT_HERSHEY_SIMPLEX, <span class=\"hljs-number\">0.5<\/span>, (<span class=\"hljs-number\">0<\/span>, <span class=\"hljs-number\">255<\/span>, <span class=\"hljs-number\">0<\/span>), <span class=\"hljs-number\">2<\/span>)\n\n<span class=\"hljs-comment\"># \u691c\u51fa\u7d50\u679c\u304c\u306a\u3051\u308c\u3070\u901a\u77e5<\/span>\n<span class=\"hljs-keyword\">if<\/span> not read_objects:\n    <span class=\"hljs-keyword\">print<\/span>(<span class=\"hljs-string\">\"\u7269\u4f53\u304c\u691c\u51fa\u3055\u308c\u307e\u305b\u3093\u3067\u3057\u305f\u3002\"<\/span>)\n<span class=\"hljs-keyword\">else<\/span>:\n    <span class=\"hljs-keyword\">print<\/span>(f<span class=\"hljs-string\">\"\u691c\u51fa\u3055\u308c\u305f\u7269\u4f53: {read_objects}\"<\/span>)\n\n<span class=\"hljs-comment\"># \u753b\u50cf\u3092\u4fdd\u5b58<\/span>\n<span class=\"hljs-keyword\">if<\/span> not cv2.imwrite(<span class=\"hljs-string\">'test_obj.jpg'<\/span>, image):\n    <span class=\"hljs-keyword\">print<\/span>(<span class=\"hljs-string\">\"test_obj.jpg \u306e\u4fdd\u5b58\u306b\u5931\u6557\u3057\u307e\u3057\u305f\u3002\"<\/span>)\n    <span class=\"hljs-keyword\">exit<\/span>()\n\n<span class=\"hljs-keyword\">print<\/span>(<span class=\"hljs-string\">\"\u7269\u4f53\u691c\u51fa\u5f8c\u306e\u753b\u50cf\u304c\u4fdd\u5b58\u3055\u308c\u307e\u3057\u305f: test_obj.jpg\"<\/span>)\n\n<span class=\"hljs-comment\"># MQTT\u30d6\u30ed\u30fc\u30ab\u30fc\u3078\u306e\u63a5\u7d9a<\/span>\nclient.on_connect = on_connect  <span class=\"hljs-comment\"># \u63a5\u7d9a\u6642\u306b\u547c\u3070\u308c\u308b\u30b3\u30fc\u30eb\u30d0\u30c3\u30af\u95a2\u6570\u3092\u8a2d\u5b9a<\/span>\nclient.connect(broker, port, <span class=\"hljs-number\">60<\/span>)  <span class=\"hljs-comment\"># \u30d6\u30ed\u30fc\u30ab\u30fc\u306eIP\u3068\u30dd\u30fc\u30c8\u3092\u6307\u5b9a<\/span>\n\n<span class=\"hljs-comment\"># \u30eb\u30fc\u30d7\u3092\u958b\u59cb\u3057\u3066\u3001\u63a5\u7d9a\u3068\u30e1\u30c3\u30bb\u30fc\u30b8\u9001\u4fe1\u3092\u5f85\u6a5f<\/span>\nclient.loop_start()\n\n<span class=\"hljs-comment\"># MQTT\u51e6\u7406\u3092\u7d42\u4e86\u3059\u308b\u5834\u5408\uff08\u51e6\u7406\u304c\u5b8c\u4e86\u3057\u305f\u5f8c\u306b\u547c\u3073\u51fa\u3059\uff09<\/span>\nclient.loop_stop()\nclient.disconnect()<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p><\/p>\n\n\n\n<p>QR\u30b3\u30fc\u30c9\u691c\u51fa<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">from picamera2 import Picamera2\nimport cv2\nimport paho.mqtt.client <span class=\"hljs-keyword\">as<\/span> mqtt\nimport json\n\n<span class=\"hljs-comment\"># MQTT\u30d6\u30ed\u30fc\u30ab\u30fc\u306e\u8a2d\u5b9a<\/span>\nbroker = <span class=\"hljs-string\">\"localhost\"<\/span>\nport = <span class=\"hljs-number\">1883<\/span>\ntopic = <span class=\"hljs-string\">\"camera\/qrcodes\"<\/span>\n\n<span class=\"hljs-comment\"># MQTT\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306e\u8a2d\u5b9a<\/span>\nclient = mqtt.Client()\n\n<span class=\"hljs-comment\"># \u30b3\u30cd\u30af\u30b7\u30e7\u30f3\u306e\u30b3\u30fc\u30eb\u30d0\u30c3\u30af\u95a2\u6570\uff08\u63a5\u7d9a\u5f8c\u306b\u547c\u3070\u308c\u308b\uff09<\/span>\ndef on_connect(client, userdata, flags, rc):\n    <span class=\"hljs-keyword\">print<\/span>(f<span class=\"hljs-string\">\"Connected with result code {rc}\"<\/span>)\n    <span class=\"hljs-comment\"># \u30c7\u30fc\u30bf\u3092Publish<\/span>\n    client.publish(topic, json.dumps(qr_result))  <span class=\"hljs-comment\"># JSON\u3092\u6587\u5b57\u5217\u3068\u3057\u3066\u9001\u4fe1<\/span>\n    <span class=\"hljs-keyword\">print<\/span>(f<span class=\"hljs-string\">\"Data published to topic {topic}\"<\/span>)\n\n<span class=\"hljs-comment\"># \u30ab\u30e1\u30e9\u3092\u521d\u671f\u5316<\/span>\ncamera = Picamera2()\ncamera.configure(camera.create_preview_configuration(main={<span class=\"hljs-string\">\"format\"<\/span>: <span class=\"hljs-string\">'XRGB8888'<\/span>, <span class=\"hljs-string\">\"size\"<\/span>: (<span class=\"hljs-number\">1280<\/span>, <span class=\"hljs-number\">960<\/span>)}))\n\n<span class=\"hljs-comment\"># \u30ab\u30e1\u30e9\u3092\u958b\u59cb<\/span>\ncamera.start()\n\n<span class=\"hljs-comment\"># \u753b\u50cf\u3092\u30ad\u30e3\u30d7\u30c1\u30e3<\/span>\nimage = camera.capture_array()\n\n<span class=\"hljs-comment\"># \u30ab\u30e1\u30e9\u3092\u505c\u6b62<\/span>\ncamera.stop()\n\n<span class=\"hljs-comment\"># QR\u30b3\u30fc\u30c9\u691c\u51fa\u5668\u3092\u521d\u671f\u5316<\/span>\nqr_detector = cv2.QRCodeDetector()\n\n<span class=\"hljs-comment\"># QR\u30b3\u30fc\u30c9\u3092\u691c\u51fa<\/span>\ndata, points, _ = qr_detector.detectAndDecode(image)\n\nqr_result = &#91;]\n<span class=\"hljs-keyword\">if<\/span> data:\n    <span class=\"hljs-keyword\">print<\/span>(f<span class=\"hljs-string\">\"\u691c\u51fa\u3055\u308c\u305fQR\u30b3\u30fc\u30c9: {data}\"<\/span>)\n    qr_result.append({<span class=\"hljs-string\">\"data\"<\/span>: data, <span class=\"hljs-string\">\"points\"<\/span>: points.tolist() <span class=\"hljs-keyword\">if<\/span> points is not None <span class=\"hljs-keyword\">else<\/span> &#91;]})\n\n    <span class=\"hljs-comment\"># \u691c\u51fa\u7d50\u679c\u3092\u63cf\u753b\uff08QR\u30b3\u30fc\u30c9\u304c\u691c\u51fa\u3055\u308c\u305f\u5834\u5408\uff09<\/span>\n    <span class=\"hljs-keyword\">if<\/span> points is not None:\n        points = points&#91;<span class=\"hljs-number\">0<\/span>]  <span class=\"hljs-comment\"># \u9802\u70b9\u5ea7\u6a19\u3092\u53d6\u5f97<\/span>\n        <span class=\"hljs-keyword\">for<\/span> i in range(len(points)):\n            pt1 = tuple(map(int, points&#91;i]))  <span class=\"hljs-comment\"># \u6574\u6570\u306b\u5909\u63db<\/span>\n            pt2 = tuple(map(int, points&#91;(i + <span class=\"hljs-number\">1<\/span>) % len(points)]))  <span class=\"hljs-comment\"># \u6b21\u306e\u70b9\u3068\u30eb\u30fc\u30d7<\/span>\n            cv2.line(image, pt1, pt2, (<span class=\"hljs-number\">0<\/span>, <span class=\"hljs-number\">255<\/span>, <span class=\"hljs-number\">0<\/span>), <span class=\"hljs-number\">2<\/span>)  <span class=\"hljs-comment\"># \u7dd1\u8272\u306e\u7dda\u3067\u63cf\u753b<\/span>\n<span class=\"hljs-keyword\">else<\/span>:\n    <span class=\"hljs-keyword\">print<\/span>(<span class=\"hljs-string\">\"QR\u30b3\u30fc\u30c9\u304c\u691c\u51fa\u3055\u308c\u307e\u305b\u3093\u3067\u3057\u305f\u3002\"<\/span>)\n\n<span class=\"hljs-comment\"># \u753b\u50cf\u3092\u4fdd\u5b58<\/span>\n<span class=\"hljs-keyword\">if<\/span> not cv2.imwrite(<span class=\"hljs-string\">'test_qr.jpg'<\/span>, image):\n    <span class=\"hljs-keyword\">print<\/span>(<span class=\"hljs-string\">\"test_qr.jpg \u306e\u4fdd\u5b58\u306b\u5931\u6557\u3057\u307e\u3057\u305f\u3002\"<\/span>)\n    <span class=\"hljs-keyword\">exit<\/span>()\n\n<span class=\"hljs-keyword\">print<\/span>(<span class=\"hljs-string\">\"QR\u30b3\u30fc\u30c9\u691c\u51fa\u5f8c\u306e\u753b\u50cf\u304c\u4fdd\u5b58\u3055\u308c\u307e\u3057\u305f: test_qr.jpg\"<\/span>)\n\n<span class=\"hljs-comment\"># MQTT\u30d6\u30ed\u30fc\u30ab\u30fc\u3078\u306e\u63a5\u7d9a<\/span>\nclient.on_connect = on_connect  <span class=\"hljs-comment\"># \u63a5\u7d9a\u6642\u306b\u547c\u3070\u308c\u308b\u30b3\u30fc\u30eb\u30d0\u30c3\u30af\u95a2\u6570\u3092\u8a2d\u5b9a<\/span>\nclient.connect(broker, port, <span class=\"hljs-number\">60<\/span>)  <span class=\"hljs-comment\"># \u30d6\u30ed\u30fc\u30ab\u30fc\u306eIP\u3068\u30dd\u30fc\u30c8\u3092\u6307\u5b9a<\/span>\n\n<span class=\"hljs-comment\"># \u30eb\u30fc\u30d7\u3092\u958b\u59cb\u3057\u3066\u3001\u63a5\u7d9a\u3068\u30e1\u30c3\u30bb\u30fc\u30b8\u9001\u4fe1\u3092\u5f85\u6a5f<\/span>\nclient.loop_start()\n\n<span class=\"hljs-comment\"># MQTT\u51e6\u7406\u3092\u7d42\u4e86\u3059\u308b\u5834\u5408\uff08\u51e6\u7406\u304c\u5b8c\u4e86\u3057\u305f\u5f8c\u306b\u547c\u3073\u51fa\u3059\uff09<\/span>\nclient.loop_stop()\nclient.disconnect()\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p><\/p>\n\n\n\n<p>\u4fdd\u5b58\u5148\u3068\u8aad\u307f\u53d6\u308a\u5148\u3092\u540c\u3058\u306b\u3059\u308c\u3070\u3001\u5b9f\u969b\u306b\u64ae\u3063\u305f\u753b\u50cf\u304b\u3089\u8eca\u3084QR\u306e\u691c\u51fa\u3092\u3059\u308b\u3053\u3068\u3082\u53ef\u80fd\u3067\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Node-RED\u3068\u306e\u63a5\u7d9a<\/h2>\n\n\n\n<p>Node-RED\u306e\u63a5\u7d9a\u306f\u3001\u30b3\u30fc\u30c9\u5185\u306b\u8a18\u8f09\u304c\u3042\u308a\u307e\u3059\u3002\uff08\u4e0b\u8a18\u53c2\u7167\uff09<br># MQTT\u30d6\u30ed\u30fc\u30ab\u30fc\u306e\u8a2d\u5b9a<br>broker = &#8220;IP\u30a2\u30c9\u30ec\u30b9&#8221;<br>port = 1883<br>topic = &#8220;\u597d\u304d\u306a\u540d\u524d&#8221;<br>\u3053\u3061\u3089\u306e\u8a2d\u5b9a\u3092\u3059\u308b\u3053\u3068\u3067\u3001mqtt\u901a\u4fe1\u3067Node-RED\u306b\u30c7\u30fc\u30bf\u3092\u9001\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"455\" src=\"https:\/\/blog.smartlight.co.jp\/wp-content\/uploads\/2024\/11\/image-4-1024x455.png\" alt=\"\" class=\"wp-image-5773\" srcset=\"https:\/\/blog.smartlight.co.jp\/wp-content\/uploads\/2024\/11\/image-4-1024x455.png 1024w, https:\/\/blog.smartlight.co.jp\/wp-content\/uploads\/2024\/11\/image-4-300x133.png 300w, https:\/\/blog.smartlight.co.jp\/wp-content\/uploads\/2024\/11\/image-4-768x341.png 768w, https:\/\/blog.smartlight.co.jp\/wp-content\/uploads\/2024\/11\/image-4-1536x683.png 1536w, https:\/\/blog.smartlight.co.jp\/wp-content\/uploads\/2024\/11\/image-4.png 1919w, https:\/\/blog.smartlight.co.jp\/wp-content\/uploads\/2024\/11\/image-4-1024x455.png 856w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Node-RED\u5185\u306e\u8a2d\u5b9a\u306f\u3001\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30fc\u3068\u304b\u306f\u306a\u304f\u30b3\u30fc\u30c9\u5185\u3067\u8a2d\u5b9a\u3057\u305fIP\u30a2\u30c9\u30ec\u30b9\u3001\u30c8\u30d4\u30c3\u30af\u3092\u8a2d\u5b9a\u3060\u3051\u3067\u901a\u4fe1\u304c\u53d6\u308c\u307e\u3059\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"926\" height=\"763\" src=\"https:\/\/blog.smartlight.co.jp\/wp-content\/uploads\/2024\/11\/image-5.png\" alt=\"\" class=\"wp-image-5774\" srcset=\"https:\/\/blog.smartlight.co.jp\/wp-content\/uploads\/2024\/11\/image-5.png 926w, https:\/\/blog.smartlight.co.jp\/wp-content\/uploads\/2024\/11\/image-5-300x247.png 300w, https:\/\/blog.smartlight.co.jp\/wp-content\/uploads\/2024\/11\/image-5-768x633.png 768w, https:\/\/blog.smartlight.co.jp\/wp-content\/uploads\/2024\/11\/image-5.png 856w\" sizes=\"auto, (max-width: 926px) 100vw, 926px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"842\" height=\"686\" src=\"https:\/\/blog.smartlight.co.jp\/wp-content\/uploads\/2024\/11\/image-6.png\" alt=\"\" class=\"wp-image-5775\"\/><\/figure>\n\n\n\n<p>\u3053\u308c\u3092localhost\u3067\u306f\u306a\u304f\u3001\u4ed6\u306e\u30b5\u30fc\u30d0\u30fc\u306b\u7e4b\u3050\u969b\u306f\u3001\u30b3\u30fc\u30c9\u5185\u306eIP\u30a2\u30c9\u30ec\u30b9\u3092\u3057\u3063\u304b\u308a\u3057\u3066\u3044\u3067\u304d\u308c\u3070\u3001local\u306eNode-RED\u3092\u7d4c\u7531\u305b\u305a\u76f4\u63a5\u901a\u4fe1\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u30c7\u30d0\u30a4\u30b9 \u4eca\u56de\u4f7f\u3063\u305f\u30c7\u30d0\u30a4\u30b9\u306f\u3001Sony\u306e\u30e9\u30ba\u30d1\u30a4\u30ab\u30e1\u30e9IMX500\u3068\u3044\u3046\u3082\u306e\u3067\u3059\u3002 \u5199\u771f\u3092\u64ae\u3063\u3066\u307f\u308b \u3067\u306f\u65e9\u901f\u5199\u771f\u3092\u64ae\u3063\u3066\u3044\u304d\u307e\u3059\u3002\u30e9\u30ba\u30d1\u30a4\u3078\u306e\u63a5\u7d9a\u30a4\u30e1\u30fc\u30b8\u306f\u4e0b\u56f3\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002 \u63a5\u7d9a\u3057\u305f\u3089\u3001\u30e9\u30ba\u30d1\u30a4\u5185\u306b\u30d5\u30a9\u30eb\u30c0\u30fc<\/p>\n","protected":false},"author":6,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jin_ogp_image_url":"","_jin_last_featured_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[3],"tags":[],"class_list":["post-5766","post","type-post","status-publish","format-standard","hentry","category-intern"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/blog.smartlight.co.jp\/index.php?rest_route=\/wp\/v2\/posts\/5766","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.smartlight.co.jp\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.smartlight.co.jp\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.smartlight.co.jp\/index.php?rest_route=\/wp\/v2\/users\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.smartlight.co.jp\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=5766"}],"version-history":[{"count":1,"href":"https:\/\/blog.smartlight.co.jp\/index.php?rest_route=\/wp\/v2\/posts\/5766\/revisions"}],"predecessor-version":[{"id":5776,"href":"https:\/\/blog.smartlight.co.jp\/index.php?rest_route=\/wp\/v2\/posts\/5766\/revisions\/5776"}],"wp:attachment":[{"href":"https:\/\/blog.smartlight.co.jp\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=5766"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.smartlight.co.jp\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=5766"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.smartlight.co.jp\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=5766"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}