
餃子作りで時間研究・動作研究をやってみた
はじめに
- 餃子を包んでいる様子を動画にして、工程の現状分析をイメージした動画解析を試してみました。
- 本記事ではデータ取得->解析->可視化->分析の流れをお伝えし、解析アルゴリズムの詳細な説明は次回以降となります。
餃子を作ったのも解析・考察したのも私ですので、バイアスがあることにご留意いただければと思います
概要
- 餃子作りをテーマに、固定カメラで撮影した動画から、次の情報を半自動で抽出しました。
- 作業者が生産した餃子の個数
皮取り -> 餡つけ -> 水つけ -> ヒダ包み -> トレイに置くにそれぞれかかった時間- 工程時間のばらつき
- ヒダ包み作業中の手の動かし方の違い
- これらの情報を可視化して「実際に何が起こっていたか」についていくつか考察しました。
作業内容
最初に工程の説明です。
まず作業者は、作業者A(妻)と作業者B(私)の二人です。
二人とも餃子作りは初心者レベル(ほぼ初めて)です。また、二人とも右利きです。
作業場所はこんな感じです。中央右に皮置き場、中央に餡置き場、中央左に水置き場、各作業者の左に粉受け皿、右に完成品置き場があります。

皮置き場・餡置き場・水置き場は共用で、作業者は鏡像配置です。
撮影に使ったのはiPhone 17 Proのカメラで、作業を真上から見下ろす角度・位置に固定して撮影しました。
実際の作業の様子がこちらです。
解析にあたり、一つの餃子を包む作業を次の5つの工程に定義しました。これらに該当しない時間は手待ち候補(idle)として扱います。
| ラベル | 日本語名 | 今回の定義 |
|---|---|---|
pick |
皮取り | 皮へ手を伸ばし、1枚取って作業位置へ戻す |
fill |
餡付け | 餡をすくい、皮へ乗せて広げる |
water |
水付け | 指先を水へ付け、皮の縁を濡らす |
pleat |
ヒダ包み | 皮を折り、縁をつまんで閉じる |
place |
トレイ置き | 完成品をトレイへ置き、必要なら位置を直す |
idle |
手待ち候補 | 隣接する推定cycle間の空白時間 |
データ解析のインプットとアウトプット
インプット
作業動画を解析するために、事前に与えた情報が次になります。
| 情報種類 | 内容 |
|---|---|
| 工程名 | pick/fill/water/pleat/place/idleの6種類があること |
| 工程順序 | pick->fill->water->pleat->placeの順序は固定であること(抜け、飛ばしがない) |
| 学習・評価データ | 各作業者が一連の工程を行うことを1サイクルとして、各作業者3つずつの合計6つ分のサイクルを学習・評価に使う |
| 作業者A/Bの位置 | 各作業者の位置について、画像中の固定ROIを定義する |
学習・評価データの量について
- データが多い方が良いですが、今回の元データが18.5分であることを考えると、アノテーションに同時間程度かけてしまっては、普通に人間が作業時間をメモする負担と変わりません。
- そこで、目安として5分以内にアノテーションできる量を学習データとしました。その結果、各作業者3つずつの合計6サイクルとなりました。
アウトプット
- データ解析パイプラインから、主に次の情報をアウトプットします。
| 出力 | 内容 | 主な用途 |
|---|---|---|
| サイクル区間 | 作業者、開始・終了時刻 | 生産数の推定、動画の該当箇所への移動 |
| 工程区間 | pickからplaceまでの開始・終了時刻と所要時間 |
工程別の時間分析 |
| idle | どの作業もしていない空白時間 | 手待ち候補の把握 |
| confidence | 認識したサイクルと学習データとの類似度スコア | 誤検出候補と要確認箇所の把握 |
出力データの具体例を示します。
{
"cycle_id": "A-full-01",
"worker": "A",
"start": 9.409,
"end": 47.814,
"confidence": 0.166,
"segments": [
{"label": "pick", "start": 9.409, "end": 10.511},
{"label": "fill", "start": 10.511, "end": 24.791},
{"label": "water", "start": 24.791, "end": 30.197},
{"label": "pleat", "start": 30.197, "end": 45.913},
{"label": "place", "start": 45.913, "end": 47.814}
]
}
標準作業の設計と作業定義は人、長い動画のどこでそれが起きたかの探索はアルゴリズムという分担です。
データ解析のパイプラインについて
ここでは簡単にご紹介します。
コンセプトとしては、少量の正解データから標準作業の動き方を学んで、長時間動画から工程区間とサイクルタイムを自動推定する動画解析パイプラインです。概要図を示します。

PCA・DTWを組み合わせた時系列パターン認識となっています。
今回はどの領域がどちらへ動いたかが重要な情報になります。逆に、指先の形状などの細かい情報は精緻に拾う必要性はないと判断しました。また、カメラ・作業台が固定という条件も踏まえて特徴量を検討しました。
いくつか試し、最終的に次の4種類を採用しました。
- Lab特徴(外観を抽出)
- YCrCb特徴(人の肌を抽出)
- フレーム差分(フレーム間で動いた領域を抽出)
- Optical flow(移動の量・方向を抽出)
学習データと評価
今回は、作業者ごとに独立で2サイクルを学習、1サイクルを検証へ使用しました。
検証の結果は、開始・終了を含む6境界のMAEがA=0.284秒、B=0.282秒でした。
あくまで各作業者1サイクルだけの評価ですので、別日や座る位置を入れ替えて撮影したデータへは適応しないと思われます。
結果と考察
生産数・1サイクルの内訳(中央値)・サイクルタイム分布・手軌跡の可視化と分析を行いました。
生産数の推定
まず実際には作業者A・Bともに25個ずつ生産しています。
これに対する評価の結果、作業者Aの生産数は25個と推定し、正解でした。作業者Bの生産数は27個と推定し、不正解でした。
学習データを使って全動画分の評価を行なった結果を図に示します。

縦軸は学習データに対する類似度、横軸は完成品ごとのプロットです。
※学習データを含めた全てのconfidenceをプロットしています。
- 作業者Aは横軸16・17番が学習、18番で評価
- 作業者Bは横軸10・11番を学習、12番で評価
作業者Bで発生した2個の誤検出ですが、実際の動画を確認すると、先に25個を作り終わって後の待っている際の動作が検出されていました(confidenceは0.184、0.196です)。
解析自体の改善点として、精度の改善はもちろん、切り出した区間が本当に正解かを検証するゲート機構が必要です。
今回は、これら2件を手動で除外して分析を進めます。
作業者ごとの1サイクルの内訳
作業者が各工程で何秒時間をかけているかを中央値で分析してみます。

| 指標 | 作業者A | 作業者B |
|---|---|---|
| 生産数 | 25個 | 25個 |
| サイクル中央値 | 39.36秒 | 36.80秒 |
| 皮取り中央値 | 3.40秒 | 4.00秒 |
| 餡付け中央値 | 10.95秒 | 10.38秒 |
| 水付け中央値 | 4.10秒 | 3.29秒 |
| ヒダ包み中央値 | 18.66秒 | 16.72秒 |
| トレイ置き中央値 | 1.70秒 | 2.30秒 |
読み取れることとして
- 差が最も大きかったのはヒダ包みで、AがBより約1.94秒長い結果でした。
- 皮取りとトレイ置きはBの方が長くなっています。
作業者ごとに各工程の分布を確認
中央値の比較で差の傾向を確認できたため、各作業のサイクルタイムの分布を確認します。

読み取れること
- 相対的なばらつきを表す変動係数(CV)では、placeとpickが比較的大きくなりました。
- 一方、pleatは最も長い工程ですが、相対的には比較的安定していました。
- 手待ち候補の点も多く見られています。
ここで、任意の点について、実際の作業がどうだったかを紐づけて確認したいと思います。
Claude Opus 4.8にダッシュボードの作成をお願いして見てみました。
気になる点をクリックすると、対応する開始時間から動画が再生されます。
いくつか気になる点をみてみました
- 動画 0.21~ : 作業者A(上側)の水付け工程です。区間時間が長い点を見てみると、二回水付けしていることがわかりました。
- 動画 0.37~ : 作業者B(下側)のヒダ包み工程です。両手が画面下に見切れて正しく工程が認識できていないことがわかりました。
- 動画 0.41~ : 作業者A(上側)の皮取り工程です。最も時間がかかっている点を見てみると、皮の山から一枚をうまく掴めていないことがわかりました。
他にも、皮を取るタイミングが重なって一方が手待ちになっていることや、餡を複数回掬っていることがわかりました。
少しそれますが、データだけで判断せずに、実際何が起きていたかを確認する大事さを再確認できました。
ひだ包み中の手の軌跡を作業者間で比較
最後に、作業者の手の軌跡を比較してみたいと思います。
MediaPipe Hand Landmarkerによる手の21点を検出して比較してみました。
検出の例を次に示します。

小さい丸がランドマークを示しており、大きい丸が重心です。重心はランドマークのxy平均位置としました。
動画で見るとこんなイメージです。
学習データ3サイクルにおけるヒダ包み工程の区間で手の重心を検出し、時間方向に標準化した上で、重心位置の分布を確認してみます。

横軸・縦軸はROI(900×430px)を正規化した値です。
太線が3サイクルの平均軌跡、薄い線が各サイクル、軌跡上に配置した数字は包む作業の進行率で0~100の値をとります。この線が長いほど、画像上で重心が長い距離を移動したと言えます。
読み取れること(集計できたこと)
- 作業者Bは作業者Aに比べて、重心の軌跡長が約1.55倍でした。
- 作業者Bは作業者Aに比べて、平均速度が約1.83倍でした。。
一見作業者Bの方が熟練していると思いますが、両者が餃子作り初心者であることを考えると、二人が異なる手順で作業している可能性があります。
完成品のデータを突き合わせて確認してみたいところです。
おわりに
わかったことをまとめてみます。
作業者ごとの1サイクルの内訳から
- 作業者間で最も差が大きかったのはヒダ包みで、AがBより約1.94秒長い
- 皮取りとトレイ置きはBの方が長い
また、各工程のサイクルタイムの分布と実際の動画から
- 作業者Aが二回水付けしている
- 作業者Bのヒダ包み作業で手元が撮影範囲から見切れている
- 作業者Aが皮を取りづらそうにしている
最後に、手の軌跡から
- ヒダ包み工程では、二人は違う手順で作業している可能性が高い仮説がある
今回の解析では、少量データから時系列マッチングを試してみましたが、作業者・作業台を固定すれば作業の区間推定の実現性があることが確認できました。
実際には、工程の環境は変化していき、作業者も多数になるため、汎化性能を上げながら、区間推定精度を上げる工夫が必要になります。
また、生産数も増えることが想定されるため、切り出した動画の内容を自動で把握できるような仕組みについても検証してみたいと思います。





