差分
このページの2つのバージョン間の差分を表示します。
| 両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン | ||
| tutorial_3 [2022/01/04 14:19] – [第七項 スターターコードの完成] satoshi | tutorial_3 [2022/01/05 10:49] (現在) – [第四項 Reactについて] satoshi | ||
|---|---|---|---|
| 行 1: | 行 1: | ||
| - | ====== 第3章 スターターコード【中級編 ライン判定(通過判定)】 ====== | + | ====== 第3章 ライン判定(WEBUIを使った通過判定)【中級編】 ====== |
| この章では、\\ | この章では、\\ | ||
| * エリア検知からラインをまたいだ検知への応用 | * エリア検知からラインをまたいだ検知への応用 | ||
| 行 265: | 行 265: | ||
| 等から学び始めることがよいでしょう。\\ | 等から学び始めることがよいでしょう。\\ | ||
| - | ただし今回はReact自体が分からなくても、どのプログラムファイルをどういじれば何が変わるかという点だけでピンポイントで解説していこうと思いますので、本チュートリアルを進めるうえではReactの学習は必須ではありません。\\ | + | ただし今回はReact自体が分からなくても、どのプログラムファイルをどういじれば何が変わるかという点だけでピンポイントで上級編の一環として解説していこうと思いますので、本チュートリアルを進めるうえではReactの学習は必須ではありません。\\ |
| ===== 第五項 WEBサーバーの解説===== | ===== 第五項 WEBサーバーの解説===== | ||
| WEBサーバーについては今回FlaskというPythonで簡単にWEBサーバーを構築できる仕組みを採用します。\\ | WEBサーバーについては今回FlaskというPythonで簡単にWEBサーバーを構築できる仕組みを採用します。\\ | ||
| 行 560: | 行 561: | ||
| f.close() | f.close() | ||
| </ | </ | ||
| - | 20行目、60行目だけを | + | 20行目参照JSONファイルの変更と61行目人物の座標を座標を見取り図上のものを利用するだけの変更するだけにとどまりました。\\ |
| + | これでスターターコードは完成です。\\ | ||
| ===== 第八項 エリア検知のUI連携 ===== | ===== 第八項 エリア検知のUI連携 ===== | ||
| - | ===== 第九項 カメラ座標から見取り図座標への切り替え | + | ついでにエリア検知もUIで設定できるようにしましょう。変更箇所の解説はあまりいらないかと思いますので、結果プログラムを見てください。 |
| + | <sxh Python; | ||
| + | import sys | ||
| + | import os | ||
| + | import json | ||
| + | import cv2 | ||
| + | import math | ||
| + | from datetime import datetime, timedelta, timezone | ||
| + | import csv | ||
| + | import glob | ||
| + | import numpy as np | ||
| + | |||
| + | if __name__ | ||
| + | |||
| + | dirpath | ||
| + | duration | ||
| + | area_def_file | ||
| + | |||
| + | JST = timezone(timedelta(hours=+9), | ||
| + | print(sys.argv[1]+" | ||
| + | file_list = sorted(glob.glob(' | ||
| + | print(" | ||
| + | for filename in file_list: | ||
| + | print(filename) | ||
| + | |||
| + | json_open = open(area_def_file, | ||
| + | result_json_file = open(' | ||
| + | areadef = json.load(json_open) | ||
| + | resultarr = {} | ||
| + | for areaidx, area in enumerate(areadef[' | ||
| + | areaname=' | ||
| + | print(areaname) | ||
| + | resultarr[areaname]={} | ||
| + | print(" | ||
| + | for areaidx, area in enumerate(areadef[' | ||
| + | areaname=' | ||
| + | print(areaname) | ||
| + | polygon = [] | ||
| + | for point in area[' | ||
| + | polygon.append([point[' | ||
| + | |||
| + | contour = np.array(polygon) | ||
| + | print(contour) | ||
| + | |||
| + | for filename in file_list: | ||
| + | print(areaname+" | ||
| + | if os.path.getsize(filename) == 0: | ||
| + | continue | ||
| + | |||
| + | raw_json_open = open(filename, | ||
| + | raw_json = json.load(raw_json_open) | ||
| + | |||
| + | for frame in raw_json: | ||
| + | jptime = datetime.fromtimestamp(frame[' | ||
| + | people = frame[' | ||
| + | for person in people: | ||
| + | |||
| + | # | ||
| + | personpos = [person[" | ||
| + | test = cv2.pointPolygonTest(contour, | ||
| + | if test> | ||
| + | if person[' | ||
| + | resultarr[areaname][person[' | ||
| + | resultarr[areaname][person[' | ||
| + | resultarr[areaname][person[' | ||
| + | if resultarr[areaname][person[' | ||
| + | resultarr[areaname][person[' | ||
| + | else: | ||
| + | resultarr[areaname][person[' | ||
| + | |||
| + | json.dump(resultarr, | ||
| + | |||
| + | for areaname, records in resultarr.items(): | ||
| + | print(areaname) | ||
| + | f = open(" | ||
| + | write = csv.writer(f) | ||
| + | write.writerow([" | ||
| + | for tracking_id, | ||
| + | write.writerow([record[' | ||
| + | |||
| + | f.close() | ||
| + | </ | ||