æ åããŒã¿ã§ããŒã¿åæãããã¿ãªããã ããã«ã¡ã¯ãã·ã¹ãã ã¢ãŒããã¯ãã®äŒå¢ã§ãã ç¹å®çšéã§æ åãè§£æããAIã¢ãã«ãäœãã®ã¯å€§å€ã§ãã æ¬èšäºã§ã¯ãæ åããã®ãŸãŸè§£æããã®ã§ã¯ãªãã çæAIã§ãã¬ãŒã ãããã¹ãã«èŠçŽããCSVãšããŠåæããã¢ãããŒãã玹ä»ããŸãã ã¯ããã« æ åã®AIè§£æ ã³ã³ã»ãã æ åãã¬ãŒã ã®ããã¹ãèŠçŽ å
šäœæ§æå³ ã€ã³ã¹ããŒã« ã¯ã©ã€ã¢ã³ãã©ã€ãã©ãª OpenAIããã±ãŒãž ãã£ãŠã¿ã ããŒã«ã«ç·ã®è»çªæ å åæèª²é¡ ããã³ãã ããŒã¿åæ éªåœã®åžãã¹æ å åæèª²é¡ ããã³ãã ããŒã¿åæ èµ·åãªãã·ã§ã³ ãµã³ãã«ããã°ã©ã 説æ èŠçŽå
¥åããŒã¿éã»é »åºŠåæž ã°ãªããç»åçæ JPEGå§çž®çæå® ãã¥ãŒãµã€ãºäžéæå® ããŒã¯ã³æ°è¶
éå€å® OpenAIåãåãã ã¢ããã¹ããªãŒã ãããã« ãªã³ã¯ ã¯ããã« æ åã®AIè§£æ æ¬ããã°ã§ã¯ãäºååŠç¿ããAIã¢ãã«ã§ã®ç©äœæ€åºãã玹ä»ããŸããã SDKå
¥éâ£ã§YOLOã§ç©äœæ€åºã»ç©åœ¢æç»ã»äººæ°ã«ãŠã³ãããŠããŸãã tech.aptpod.co.jp ãã ãããããã®AIã¢ãã«ã¯äºååŠç¿ã«ããéçºãå¿
èŠã§ãã 軜ãã®PoCãªã©å©çšã·ãŒã³ã«å¿ããŠãæ¬æ Œçãªå°çšã¢ãã«éçºã䌎ããã察象ç©ã®æ€åºãæåèªã¿åããå®çŸã§ãããšäŸ¿å©ã§ãã ã³ã³ã»ãã æ¬ããã°ã§ã¯ãèšæž¬çµæãChatGPTã§ããŒã¿åæããŠããŸããã tech.aptpod.co.jp tech.aptpod.co.jp æ°å€ãæååãCSVãã¡ã€ã«ã§ChatGPTã«äžããæ€çŽ¢ãçµ±èšãã§ããŸãã ããããæ åã¯ãã€ããªããŒã¿ã§ãããããåçŽã«åãæ¹æ³ã¯äœ¿ããŸããã ããã§ãæ åãã¬ãŒã ãããã¹ãããŒã¿åããŠCSVã§ããŒã¿åæããŠã¿ãŸãã æ åãã¬ãŒã ã®ããã¹ãèŠçŽ æ åãã¬ãŒã ãAIã¢ãã«ã«èŠçŽã»èšè¿°ãããããã¹ãããŒã¿ã«å€æããŸãã 1 OpenAIã® chat.completions APIã« æ åãã¬ãŒã ãBase64ãšã³ã³ãŒãããŠãªã¯ãšã¹ãããŸãã qiita.com çæAI掻çšã§éèŠãªã®ã¯ããã¹ãŠãéãã®ã§ã¯ãªããäœãéããªãããã®èšèšã§ãã 粟床ã»å®å®æ§ã®ãããæ åãã¬ãŒã ãéåŒãã»éçŽããŠããŒã¿éãšé »åºŠãæããŸãã 2 # 工倫 广 1 æ åãã¬ãŒã ãçž®å° ããŒã¿éäœæž 2 åãã¬ãŒã ãšã®å·®åãäžå®ä»¥äžã®ãšãã ã é »åºŠäœæž 3 4Ã4ã°ãªããç»åã«æç³»åå§çž® é »åºŠäœæž 4 JPEGå§çž® ããŒã¿éäœæž 5 ãªã¯ãšã¹ãåŸ
ã¡ã2ä»¶ãŸã§ã«å¶é é »åºŠäœæž 6 ããŒã¯ã³æ°è¶
éãããã¹ããã é »åºŠäœæž ãããã¯ååŠçãå¿
èŠãªã®ã§intdash SDKã䜿ã£ãŠå®è£
ããŸãã 3 å
šäœæ§æå³ intdash ãªã¢ã«ã¿ã€ã APIããããŠã³ã¹ããªãŒã ããæ åãã¬ãŒã ã ã°ãªããç¶ã«äžŠã¹ãç»åãšèŠçŽçµæãã¢ããã¹ããªãŒã ããŸãã èŠçŽçµæã¯ãããšã§CSVã§ããŠã³ããŒãããŠèšæž¬å
šäœã®åæãè¡ããŸãã å
šäœæ§æå³ ã€ã³ã¹ããŒã« ã¯ã©ã€ã¢ã³ãã©ã€ãã©ãª REST APIããªã¢ã«ã¿ã€ã APIã®äœ¿ãæ¹ã¯ SDKå
¥é⣠ãšåãã§ãã OpenAIããã±ãŒãž 远å ã§OpenAIã©ã€ãã©ãªãã€ã³ã¹ããŒã«ããŸãã pip install openai ãã£ãŠã¿ã ããŒã«ã«ç·ã®è»çªæ å åæèª²é¡ 2024幎11æãæ¿ç·åå³¶ãèµ°ãä¹
çéç·ã®äžéšåºéïŒä¹
çéé§
ïœäžç·äºå±±é§
éïŒã廿¢ããããšçºè¡šãããŸããã å©çšå®¢ã®æ¿æžã«ããäžæ¡ç®ãçç±ã ããã§ãã www.sankei.com å®éã«ä¹è»ããŠããŸããã 4 æšæŽæŽ¥é§
ãåºçºããŠãå»ç·äºå®ã®ä¹
çéé§
ãçµç¹äžç·äºå±±é§
ãŸã§ãèµ°ãåºéã§ãã 5 èšæž¬ãšèŠçŽçµæãå¯èŠåããŸããã 6 youtu.be ããã³ãã ç»åãèŠçŽãããããã³ããã chat.completions APIã«æž¡ããŸãã ããªãã¯åè»ã®ã«ã¡ã©æ åïŒ4x4ã°ãªããã®æç³»åç»åïŒãèŠçŽããAIã§ãã é æ¯ãå«ãã人ç©ã»å±
äœã»ç§»åã»ã€ã³ãã©ç®¡çãã人éçæŽ»ã®å
åãæ€åºããŸãã åºåã¯å¿
ã以äžã®JSON圢åŒã§è¿ããŠãã ããã { "person": 人ç©ã®æ° int, "group": éå£ã®æç¡ ç¡/æ, "view": èŠé ç¡/ç/äž/åº, "area": ãšãªã¢çš®å¥ åžè¡å°/äœå®
å°/蟲å°/èå°/å±±é etc, "building": äœå®
å¯åºŠ ç¡/ç/å¯, "road": éè·¯å¹
ç¡/现/倪, "infra": èšåã®æŽå床 ç¡/è/æŽ, "text": ç»åããèªã¿åããæåïŒã°ãªããå·Šäžã®æå»ã¯é€ãïŒ, "description": èŠãã颚æ¯ã®èª¬æ } æå¹ãªJSONã®ã¿ãåºåããŠãã ããã ãã®ãããªJSONãè¿ã£ãŠããŸãã 7 { " person ": 3 , " group ": " ç¡ ", " view ": " åº ", " area ": " åžè¡å° ", " building ": " ç ", " road ": " 倪 ", " infra ": " æŽ ", " text ": " 28 ", " description ": " åžè¡å°ã®é路沿ãã«ãã建ç©ãšè»äž¡ããã€ã¯ãèŠãã颚æ¯ãåšå²ã«ã¯èæšãçããŠããã " } ãªã¢ã«ã¿ã€ã ã§èŠçŽããçµæãintdashã«ã¢ããã¹ããªãŒã ããŸãã python ./lesson10/src/analyze_video.py --api_url https://example.intdash.jp --api_token < YOUR_API_TOKEN > --project_uuid < YOUR_PROJECT_UUID > --edge_uuid < YOUR_EDGE_UUID > --openai_key < YOUR_OPENA_KEY > ããã°ã©ã èµ·å Data Visualizerã§ãªã¢ã«ã¿ã€ã å¯èŠå 以äžã®é
ç®ã衚瀺ãããŠããŸã å
¥åããŒã¿ïŒç»é¢å·Šäž GNSSããŒã¿ H.264æ å åºåããŒã¿ïŒç»é¢äžå€®ã»å³åŽã»äžåŽ ãã¬ãã¥ãŒç»åïŒã°ãªãããåããŠããéäžã®ç»åïŒJPEGïŒ èŠçŽå¯Ÿè±¡ç»åïŒã°ãªãããåãŸã£ãŠèŠçŽå¯Ÿè±¡ã«ãªã£ãç»åïŒJPEGïŒ èŠçŽçµæïŒJSONå
ã®é
ç® ããŒã¿åæ ããã§ã¯ãåæãè¡ããŸãã èª²é¡ ããŒã«ã«ç·ã®å©çšè
æ°ã¯ãããªã«å°ãªãã®ãã Data Visualizerã§ããŒã¿ãéžæããŠCSVãã¡ã€ã«ãããŠã³ããŒãããŸãã intdash Motionã¢ã㪠GNSSããŒã¿ ã°ãªããç»åã®èŠçŽçµæ JSONã®åé
ç® https://example.intdash.jp/vm2m/?playMode=storedData&startTime=2026-01-12T14:54:44.000%2B09:00&endTime=2026-01-12T16:05:04.000%2B09:00 CSVããŠã³ããŒã CSVãã¡ã€ã« ChatGPTã«CSVãã¡ã€ã«ãã¢ããããŒãããŠãåºæ¬æ
å ±ã確èªããŸãã ããŒã«ã«ç·èµ°è¡äžã®GNSSããŒã¿ãã«ã¡ã©æ åã®èŠçŽçµæã®CSVããŒã¿ãã¢ããããŒãããŸãã GNSSããŒã¿ïŒç·¯åºŠçµåºŠãé床ãé«åºŠãæ¹äœïŒãèŠçŽçµæïŒäººç©æ°ãé壿ç¡ãèŠçã®åºãããšãªã¢çš®å¥ã建ç©å¯åºŠãéè·¯åºããã€ã³ãã©æŽå床ãæåèµ·ããã説æïŒãå«ãŸããŸãã 課é¡ïŒããŒã«ã«ç·ã®å©çšè
æ°ã¯ãããªã«å°ãªãã®ãã ã®ããã«ããŒã¿åæãè¡ããŸãã 以äžã確èªããŠãã ããã - é
ç®ã®äžèЧ - ããŒã¿è¡æ° - ã¿ã€ã ã¹ã¿ã³ãç¯å² ããŒã¿ã®ç¢ºèª ããŒã¿é
ç®ãæŽããŸãã ããŒã¿ãæŽããŠãã ããã - èŠãããã®ãããé
ç®åã®"GNSS_"ãš"@"以éãåé€ããŠãã ããã - 空ã®å€ãå«ãŸããŸããGNSSããŒã¿ã«ã€ããŠã¯çŽåã®å€ã䜿çšããŠç©ŽåãïŒforward fillïŒããŠãã ããã ãŸãã - åæçµæã®ã°ã©ãã¯è±èªã§ãæ¬æã¯æ¥æ¬èªã§è¡šèšããŠãã ããã ããŒã¿ã¯ã¬ã³ãžã³ã° ãŸãã¯ã·ã³ãã«ã«èããŠã¿ãŸãã æ€åºãã人æ°ã®æå€§å€ãéå£ãæ€åºãããã ãæããŠãã ããã 人ç©ã»é壿€åºã®çµæ ã°ã©ããå°å³ã§å¯èŠåããŠã¿ãŸãã 人æ°ã 0人 / 1â2人 / 3äººä»¥äž ã®æéå²å éå£ã ç¡ / æ ã®æéå²å ãããããã°ã©ãã«ããŠãã ããã 人æ°ãé壿ç¡ã®å²åã°ã©ã GNSSã®ç·¯åºŠçµåºŠããŒã¿ããPythonã®Foliumã䜿ã£ãŠä»¥äžãããããããŠãã ããã 以äžãå¯èŠåããŠãã ããã ã»äººç©æ€åºç®æã»äººæ° ã»é壿€åºç®æ 人æ°ã»éå£ã®å°å³ãããã æ€åºãããã®ã¯ããããæšæŽæŽ¥é§
çºã®åååºéã§ãããå»ç·äºå®ã®ä¹
çéé§
以åã§ã¯äººç©ã»éå£ãèŠãããŸããã 8 ãã ãã誀æ€åºã®ç®æãããã粟床ã¯å°çšAIã¢ãã«ã«å£ãããã§ãã å¢ç³ã人éãšééããŠãã ä»åºŠã¯å°å³äžã«ããšãªã¢çš®å¥ãè²åãããŠããããããŠãã ããã ãšãªã¢çš®å¥ èµ€ ïŒåžè¡å° ãªã¬ã³ãž ïŒäœå®
å° ç· ïŒèå° æ¿ç· ïŒèŸ²å° é ïŒå±±é ä¹
çéé§
以åã¯ã¯ã£ãããšå±±éãå€ãã®ãããããŸãã 9 åãããåèŠçŽçµæãããããããŸããã 建ç©å¯åºŠ èµ€ ïŒå¯ æ¿ç· ïŒç é ïŒç¡ éè·¯å¹
èµ€ ïŒå€ª æ¿ç· ïŒçް ã°ã¬ãŒ ïŒä» ã€ã³ãã©æŽå床 æ¿ç· ïŒæŽ é» ïŒè ã°ã¬ãŒ ïŒç¡ æåèµ·ããã®ç²ŸåºŠãèŠãŠã¿ãŸãã æåèµ·ããã§ããæååããªã¹ãåããŠãã ããã æåèµ·ãããªã¹ã 沿ç·ã«çæ¿ãªã©ãããã»ã©å€ãã¯ãªãããã§ãã è€æ°è¡ã®å Žåã¯æ¹è¡ã³ãŒãä»ãã§ãã JPEGã®ç»è³ªãèœãšããŠããããã"俵ç°"é§
ã®èª€åãç®ç«ã¡ãŸãã çµè« 1åã®èšæž¬ã§ã¯ä¹
çéé§
以åã§"æ··é"ã確èªã§ããªãã£ãã äžæ¹ã§ã沿ç·ç°å¢ã®ç¹åŸŽãèªã¿è§£ãã®ã«ã¯æå¹ãªæ
å ±ãåŸãããã è»çªããåºããèªç¶ã®çºãã¯ãæããæéãå¿ããŠããŸãé
åãããã éªåœã®åžãã¹æ å ããã³ãããå·®ãæ¿ããŠå¥ã®ããŒã¿åæãè¡ããŸãã åæµ·é åæ³åžè¡ãæ°åæ³ç©ºæž¯ãŸã§ã®ãã¹æ åã§ãã åæèª²é¡ 2026幎1æ13æ¥ã坿³¢å°æ¥ã«ãããç©éªã«ãã亀é麻çºçãæžå¿µãããŠããŸããã www.uhb.jp å®éã«è¡ã£ãŠç¢ºèªããŠããŸããã 10 åæ³åžè¡ã§ãã¹ã«ä¹ã蟌ã¿ãæ°åæ³ç©ºæž¯ãŸã§èµ°ããŸãã 11 èšæž¬ãšèŠçŽçµæãå¯èŠåããŸããã 12 youtu.be ããã³ãã ããã³ããããã®ããã«å·®ãæ¿ããŸãã ããªãã¯è±ªéªå°åž¯ã®åžãã¹ã®ã«ã¡ã©æ åïŒ4x4ã°ãªããã®æç³»åç»åïŒãèŠçŽããAIã§ãã 亀éã»ç©éªã»é€éªç¶æ
ããçæŽ»ã®æ¯éå
·åãæ€åºããŸãã åºåã¯å¿
ã以äžã®JSON圢åŒã§è¿ããŠãã ããã { "person": 人ç©ã®æ° int, "vehicle": è»äž¡ã®æ° int, "view": èŠé ç¡/ç/äž/åº, "area": ãšãªã¢çš®å¥ åžè¡å°/äœå®
å°/éå€/ãã³ãã«/空枯 etc, "depth": 建ç©ã»æš¹æšã»è»äžã®ç©éª ç¡/å°/å€, "sidewalk": æ©éã®é€éª æª/äž/æž, "pile": è·¯è©ã®å éª ç¡/å°/å€, "text": ç»åããèªã¿åããæåïŒã°ãªããå·Šäžã®æå»ã¯é€ãïŒ, "description": èŠãã颚æ¯ã®èª¬æ } æå¹ãªJSONã®ã¿ãåºåããŠãã ããã ãã®ãããªJSONãè¿ã£ãŠããŸãã { " person ": 1 , " vehicle ": 1 , " view ": " äž ", " area ": " åžè¡å° ", " depth ": " å€ ", " sidewalk ": " äž ", " pile ": " å€ ", " text ": " æ¶ç«æ ", " description ": " éªãç©ãã£ãåžè¡å°ã®éè·¯ã«ãæ©éãšè»éãããã人ã®äººç©ãš1å°ã®è»ãèŠããã " } ããã³ããèšå®ãã¡ã€ã«ãæå®ããŠããã°ã©ã ãèµ·åããŸãã python ./lesson10/src/analyze_video.py --api_url https://example.intdash.jp --api_token < YOUR_API_TOKEN > --project_uuid < YOUR_PROJECT_UUID > --edge_uuid < YOUR_EDGE_UUID > --openai_key < YOUR_OPENA_KEY > --prompt_path ./lesson10/config/snow.txt ããã³ããå·®ãæ¿ãã§èµ·å ããã³ããå·®ãæ¿ãã§å¯èŠå ããŒã¿åæ åæãè¡ããŸãã èª²é¡ è±ªéªå°åž¯ã®é€éªã¯è¡ãå±ããŠãããã Data Visualizerã§ããŒã¿ãéžæããŠCSVãã¡ã€ã«ãããŠã³ããŒãããŸãã CSVããŠã³ããŒã CSVãã¡ã€ã« ChatGPTã«CSVãã¡ã€ã«ãã¢ããããŒãããŠãåºæ¬æ
å ±ã確èªããŸãã 豪éªå°åã®åžãã¹èµ°è¡äžã®GNSSããŒã¿ãã«ã¡ã©æ åã®èŠçŽçµæã®CSVããŒã¿ãã¢ããããŒãããŸãã GNSSããŒã¿ïŒç·¯åºŠçµåºŠãé床ãé«åºŠãæ¹äœïŒãèŠçŽçµæïŒäººç©æ°ãè»äž¡æ°ãèŠçã®åºãããšãªã¢çš®å¥ã建ç©ã»æš¹æšã»è»äžã®ç©éªç¶æ³ãæ©éã®é€éªç¶æ³ãè·¯è©ã®å éªç¶æ³ãæåèµ·ããã説æïŒãå«ãŸããŸãã 課é¡ïŒè±ªéªå°åž¯ã®é€éªã¯è¡ãå±ããŠãããã ã®ããã«ããŒã¿åæãè¡ããŸãã 以äžã確èªããŠãã ããã - é
ç®ã®äžèЧ - ããŒã¿è¡æ° - ã¿ã€ã ã¹ã¿ã³ãç¯å² ããŒã¿ã®ç¢ºèª ããŒã¿ã¯ã¬ã³ãžã³ã° ä»åã¯ãããªãã°ã©ãåããŠã¿ãŸãã æ©éã®é€éªç¶æ³ã®å²å ãã°ã©ãã§è¡šç€ºããŠãã ããã æ©éã®é€éªç¶æ³ã°ã©ã æååãããŠããŸãããå·Šãã æª / äž / æž ã®é ã§äžŠãã§ããŸãã æž ãšå€æãããã®ã¯40ïŒ
以äžã æª ã¯50%è¶
ã§ãã ãã ããé€éªåŸãå®å
šã«æ©éãèŠããªãã±ãŒã¹ã§ã¯ç»åã§çœãèŠããããã倿ã®ç²ŸåºŠã¯é«ããªãããã§ãã é€éªç¶æ³ã倿ãé£ããããªã±ãŒã¹ ããå°ã詳ããèŠãŠã¿ãŸãããã GNSSã®ç·¯åºŠçµåºŠããŒã¿ããPythonã®Foliumã䜿ã£ãŠä»¥äžãããããããŠãã ããã 以äžãå¯èŠåããŠãã ããã ã»æ©éã®é€éªç¶æ³ æ©éã®é€éªç¶æ³ã®ãããã èµ€ ïŒæª ãªã¬ã³ãž ïŒäž æ¿ç· ïŒæž ã°ã¬ãŒ ïŒä» åžè¡ã亀差ç¹ã空枯æ§å
ã¯ããããé€éªçãé«ããã§ãã ä»ã®é
ç®ãå¯èŠåããŠã¿ãŸãããã ä»åºŠã¯å°å³äžã«ããšãªã¢çš®å¥ãè²åãããŠããããããŠãã ããã åžè¡å°/äœå®
å°/éå€/ãã³ãã«/空枯 etc ã§è²åãããŠãã ããã ãšãªã¢çš®å¥ èµ€ ïŒåžè¡å° é ïŒäœå®
å° æ¿ç· ïŒéå€ çŽ« ïŒãã³ãã« ãªã¬ã³ãž ïŒç©ºæž¯ ãã³ã¯ ïŒä» ãšãªã¢çš®å¥ããšã®é€éªçã確èªããŠã¿ãŸãã ãšãªã¢å¥ã®é€éªç¶æ³ æª/äž/æž ãç©ã¿äžãã°ã©ãåããŠãã ããã ã°ã©ãå
ã®æèšã¯è±èªã«èš³ããŠè¡šç€ºããŠãã ããã ãšãªã¢å¥é€éªç¶æ³ 空枯ãšå€æããããšãªã¢ã¯é€éªçã80ïŒ
è¶
ãåžè¡å°ã¯éšåçãå«ãããš70ïŒ
匱ã§ãã éå€ã®é€éªçã¯20ïŒ
ã«çãŸã£ãŠãããæ©è¡è
ãå€ããšãªã¢ãåªå
ããŠé€éªãããŠããã®ãããããŸãã ãã³ãã«ã¯ããããç©éªããããŸããããé€éªã æª ãšå€æãããŠããŸãã ãã³ãã«å
㯠ç©éªïŒç¡ ã〠é€éªïŒæª ä»ã®èгç¹ã§ãèŠãŠã¿ãŸãããã è·¯è©ã®å éªãšèŠçã®åºããçµã¿åãããŠã è·¯è©ã®å éªã«ãããèŠçã確ä¿ã§ããªããšæããããã€ã³ããããããããŠãã ããã èŠç確ä¿ãªã¹ã¯ãã€ã³ã Data Visualizerã§èŠããšç¢ºãã«è©²åœæå»ã¯å€§ããªå éªãæ ã£ãŠãããæ©éã®ç¶æ³ãã»ãšãã©èŠããŸããã 13 è©²åœæå»ã®æ å çµè« é€éªã¯éããããªãœãŒã¹ã§æ¥µããŠå¹ççã«è¡ãããŠããããšã䌺ããã 倧åèã§ãã空枯ã¯"æåªå
"ã§å®ãããŠããã èµ·åãªãã·ã§ã³ --api_url required ïŒãµãŒããŒURL --api_token required ïŒAPIããŒã¯ã³ --project_uuid ïŒãããžã§ã¯ãUUIDïŒçç¥æã¯ Global ProjectïŒ --edge_uuid required ïŒããŠã³ã¹ããªãŒã ãšããžUUID --dst_edge_uuid ïŒã¢ããã¹ããªãŒã ãšããžUUID --openai_key required ïŒOpenAI ã¢ã¯ã»ã¹ã㌠--prompt_path ïŒã·ã¹ãã ããã³ãããã¡ã€ã«ãã¹ ãµã³ãã«ããã°ã©ã 説æ è€éã«èŠããŸããã SDKå
¥é⣠ãšåããååŠçãã·ã³ãã«ãªéåæã¹ããŒãžã«åããŠäžŠåèµ·ããŠããŸãã ã¯ã©ã¹ã¢ãŒããã¯ã㣠èŠçŽå
¥åããŒã¿éã»é »åºŠåæž ã°ãªããç»åçæ ãã¬ãŒã ãçž®å°ããŸãã img = np.frombuffer(frame, dtype=np.uint8).reshape((self._in_h, self._in_w, 3 )) tile_img = cv2.resize( img, (self._tile_w, self._tile_h), interpolation=cv2.INTER_AREA ) åãã¬ãŒã ãšçŸãã¬ãŒã ã®å·®ç°ãéŸå€æªæºãªããã¹ãããããŸãã ãã¹ãã°ã©ã åããŠæ¯èŒããŠããŸãããå Žåã«ãã£ãŠã¯ãã£ãšå³å¯ã«å€å®ããæ¹ããããããããŸããã if self._prev_tile_hist is not None : d = cv2.compareHist(self._prev_tile_hist, cur_h, cv2.HISTCMP_BHATTACHARYYA) if d < self._diff_threshold: return None , False self._prev_tile_hist = cur_h 4x4ã°ãªããã«é
眮ããŸãã for i, t in enumerate (self._tiles[: self._grid_size]): c = i % self._cols x0 = c * self._tile_w r = i // self._cols y0 = r * self._tile_h grid[y0 : y0 + self._tile_h, x0 : x0 + self._tile_w] = t JPEGå§çž®çæå® JPEGãšã³ã³ãŒãã® GStreamer ãã€ãã©ã€ã³ã«èšå®ããŠããŸãã QUALITY = 50 ... quality=QUALITY, ãã¥ãŒãµã€ãºäžéæå® self.prompt_queue: asyncio.Queue[ int ] = asyncio.Queue(maxsize=chat_maxsize) ããŒã¯ã³æ°è¶
éå€å® try : answer = await asyncio.to_thread(self.chatter.chat, frame) ... except RateLimitError as e: logging.info(f "RateLimitError! {e}" ) await asyncio.sleep( 0.5 ) OpenAIåãåãã JPEGç»åãBase64ãšã³ã³ãŒãããŠãªã¯ãšã¹ãã«ä»äžããŠããŸãã MODEL = "gpt-4o-mini" ... image_b64 = base64.b64encode(image).decode( "utf-8" ) messages: list [ChatCompletionMessageParam] = [ { "role" : "system" , "content" : self.system_prompt}, { "role" : "user" , "content" : [ { "type" : "image_url" , "image_url" : { "url" : f "data:image/jpeg;base64,{image_b64}" }, }, ], }, ] resp = self.client.chat.completions.create( model=MODEL, messages=messages, max_tokens= 400 , temperature= 0.3 , response_format={ "type" : "json_object" }, ) ã¢ããã¹ããªãŒã èŠçŽçµæãã¢ããã¹ããªãŒã ããŠããŸãã await self.up.write_data_points( iscp.DataID(name=self.data_name_answer, type = "string" ), iscp.DataPoint( elapsed_time=elapsed_time, payload=payload.encode( "utf-8" ), ), ) await self.up.flush() ãããã« SDKãå©çšããŠæ åããŒã¿ãããã¹ãèŠçŽãçæAIã§ããŒã¿åæããŸããã ãŸããããã³ãããå·®ãæ¿ããŠèŠçŽå
容ã倿Žã§ããŸããã AIéçºãäžèŠã«ãªããããã¹ããŒãã¡ã³ããå·¡åç¹æ€PoCã詊ãããããªãããã§ãã ä»åã¯ã€ã³ã¿ãŒãããçµç±ã§APIãšã³ããã€ã³ãã䜿çšããŠããŸãã 14 çæAIå©çšã®ãããã¯ãŒã¯é
å»¶ãããŒã¯ã³æ°ã«çžãããªããããOllama ãªã©ã®æ€èšãæå¹ããã§ãã tech.aptpod.co.jp tech.aptpod.co.jp ãªã³ã¯ æ¬ã·ãªãŒãºã®éå»èšäºã¯ãã¡ãããã芧ãã ããã SDKå
¥éâ ã瀟çšè»ã§èµ°ã£ããšãå
šéšèŠããŸãã ïŒREST APIã§ããŒã¿ååŸ SDKå
¥éâ¡ãããŒã¿ç§»è¡ããŒã«ã®äœãæ¹ã ïŒREST APIã§ããŒã¿éä¿¡ SDKå
¥éâ¢ãRTSPã§æ åé
ä¿¡ãããã ïŒãªã¢ã«ã¿ã€ã APIã§ããŒã¿ååŸ SDKå
¥éâ£ãYOLOã§ç©äœæ€ç¥ãã¡ããã ïŒãªã¢ã«ã¿ã€ã APIã§ããŒã¿éä¿¡ SDKå
¥éâ€ãiPadã§Data VisualizerãèŠãäŒã ïŒãªã¢ã«ã¿ã€ã APIã§ãã£ããã£ããŒã¿éä¿¡ SDKå
¥éâ¥ãæéæé«åºŠã§èšæž¬ããæ¥ã ïŒ AWS Lambdaã§REST APIããŒã¿éä¿¡ SDKå
¥éâŠãèšæž¬ãªãã¬ã€ããŒã«ã®äœãæ¹ã ïŒ REST APIã§ããŒã¿ååŸããªã¢ã«ã¿ã€ã APIã§ããŒã¿éä¿¡ SDKå
¥éâ§ãåç»ã¢ããããŒãããŒã«ã®äœãæ¹ã ïŒREST APIã§æ åããŒã¿éä¿¡ SDKå
¥éâšãåç»ããŠã³ããŒãããŒã«ã®äœãæ¹ã ïŒREST APIã§ããŒã¿ååŸããã¡ã€ã«å ä»åãã¢ãã«ã¯OpenAIã® gpt-4o-mini ã䜿çšããŸããããã¹ããç»åãå
¥åã§ãããã«ãã¢ãŒãã«ã¢ãã«ã§ããèŠèŠç²ŸåºŠã§ã¯VLMãæå©ã§ãããintdashããæ å以å€ã®ããŒã¿ãæž¡ããããšãæ³å®ããŠããã«ãã¢ãŒãã«ã¢ãã«ãéžæããŠããŸãã ↩ åæã«OpenAIã®APIããŒã¯ã³æ¶è²»éãäœæžããŠããŸãã ↩ ãµã³ãã«ããã°ã©ã ã GitHub ã«ãŠå
¬éããŠããŸãã ↩ 2024幎2æã«èšæž¬ãè¡ããŸããã ↩ äžåºŠåéããèšæž¬ããŒã¿ã SDKå
¥éâŠãèšæž¬ãªãã¬ã€ããŒã«ã®äœãæ¹ã ã§ãªã¢ã«ã¿ã€ã ã§åã¢ããã¹ããªãŒã ããŠããŸãã ↩ 1æéã»ã©ãããŸããé£ã°ããªããèŠãŠãã ããã ↩ ããŸã« éè·¯å¹
:现 ã®ããã«æå®ãã厩ããå ŽåããããŸãã ↩ é²è¡æ¹åå³åŽã®æ åã®ã¿ã§å€å®ããŠããŸããå·ŠåŽã«ããŒã ããé§
ãå€ãã£ãã®ã§å®æ
ããå°ãªãæ€åºãããŠãããããããŸããã ↩ ããã³ããã§äžããäŸ åžè¡å°/äœå®
å°/蟲å°/èå°/å±±é ã®åºåãã«åŒãããããŠããã§ããããã³ããã®äžãæ¹æ¬¡ç¬¬ã§ãã£ãšææçŸ©ãªåé¡ãã§ãããããããŸããã ↩ å¹éªã®æ°æ¥åŸã®2026幎1æ18æ¥ã«èšæž¬ãè¡ããŸããã ↩ ãã¡ããèšæž¬ããŒã¿ã SDKå
¥éâŠãèšæž¬ãªãã¬ã€ããŒã«ã®äœãæ¹ã ã§åã¢ããã¹ããªãŒã ããŠããŸãã ↩ 16åã»ã©ã§ããåçé床ã調æŽãªã©ããŠèŠãŠãã ããã ↩ ä»ã®è©²åœãã€ã³ãã§ã¯å€§ããªãã§ã³ã¹ãæ ã£ãŠããããããããå³å¯æ§ã¯é«ããªãããã§ãã ↩ æ¶è²»ããŒã¯ã³ã®åŸé課éã§ããéçºãéããŠãé·æéããŒã¿ãæµãã£ã±ãªãã«ããªãããã«æ°ãã€ããŠäœ¿ãã$4.40åãæ¶è²»ããŸããã ↩