作成: 2026-10-27 対象: Meta Global AI Developer Hackathon(提出 11/4 21:00 ET = 11/5 11:00 JST) トラック: Indie Developer 課題: Build for Your World
ストーリーは story.md:外から買う肥料と指導に頼る農業を、畑の中の力(根と菌根菌)で回す形に作り直す。畑ごとに違うので、AI がその畑を読み、人が結果で答え合わせする。農家一人一人が自分の畑を読めるようになる道具。
仕組みとしては、毎日スマホで撮る定点写真を、位置合わせ → SAM 3.1 で切り分け → Muse Spark で前日までと比較 → 農家が声で正誤を付ける、という流れで**検証済みの観察記録(プレーンテキスト)**に変える。
自然農法では、細かく正確に測ることより全体を見ることが重要。AI の出力もまず全体の様子(勢い、色、草の組み合わせ、偏り)を短く言い、数字や個体の話はそれを支える範囲に留める。SAM の被覆率は「全体の割合がどう動いたか」をつかむ目安で、精密な計測ではない。
| モデル | 確認した事実 | この企画での使い方 |
|---|---|---|
SAM 3.1 (sam-3.1) |
短い名詞句1つで、該当する全インスタンスのボックス+マスクを返す。1リクエスト1概念(カンマ列挙は不可)。否定・OR・位置指定は不可。ゼロ件は正常応答。入力は URL または base64。出力はフレームごとに1行の特殊トークン文字列、マスクは base85 ラスタ。ボックス/点プロンプトで ID を指定した追跡も可。$2.50/1k 画像。 | 概念ごとに1リクエスト(例: "crop seedling", "weed", "bare soil", "animal footprint")。マスクのピクセル数から被覆率を出す。 |
Muse Spark 1.3 (muse-spark-1.3) |
画像・動画・PDF 入力、1M トークン、1リクエストに複数画像可。Responses API(OpenAI SDK 互換、base_url=https://api.meta.ai/v1)。構造化出力、点/ボックス/カウントの「perception grounding」あり。Standard は学習に使われない($1.25/$4.25 per Mtok)。-contributor は学習に使われる代わりに安い。音声入力は 1.3 では劣化 → Voice Transcribe を使えとの注記。 |
位置合わせ済みの「今日+過去数日」+SAM の被覆率+天気を1リクエストで渡し、変化だけを JSON で返させる。畑の写真なので Standard を使う。 |
| Muse Glimmer (30B, Apache 2.0) | テキスト+画像入力。単一 GPU / Mac で動く想定。Ollama, llama.cpp, vLLM 対応。 | ローカル処理(日次の簡易説明、記録の整形)。写真を外に出さない経路。 |
| Muse Spark Open | テキスト・画像・動画・音声入力のオープンウェイト。自前ホストか外部プロバイダ。 | Glimmer で足りない場合の代替。規模が大きいので優先度は低い。 |
Muse Voice Transcribe (muse-voice-transcribe-1.0) |
日本語対応(25言語、languageBias で指定)。語彙バイアスあり(農業用語を登録できる)。ファイル送信は POST /v1/asr/transcribe、WAV、10分以内、32MB以内。$0.18/時間。 |
畑で撮りながら話した一言を文字起こし → 農家の判定として記録。 |
| Muse Code | ターミナル用コーディングエージェント。 | 開発に使い、README に使用箇所を書く。 |
- SAM は「何を切るか」を知らない。 名詞句を決めるのは人(またはSpark)。自然農法の畑では「作物/雑草」は見た目で分けにくいので、概念名はこの畑の実態に合わせる(例: "daikon leaf" のように作物名で指定する方が "crop" より当たる可能性が高い)。これは写真が来てから試験する。
- 複数日比較は Spark 1回で済む。 複数画像入力が確認できたので、「昨日と今日の差分」を1プロンプトで聞ける。
- 音声は Spark に直接入れない。 Voice Transcribe で文字にしてから渡す。
- ローカル経路は Glimmer。 ただし 30B なので、手元の GPU/メモリ次第で量子化が必要(要確認: 開発機の構成)。
作物: 大根(Raphanus sativus)とカイラン(Brassica oleracea var. alboglabra)。どちらもアブラナ科で、子葉期はどちらもハート形。
見分けの手がかり(子葉〜本葉期):
| 大根 | カイラン | |
|---|---|---|
| 子葉 | 大きい、明るい緑 | やや小さい、厚く青みがかった緑(ろう質) |
| 本葉 | ざらつき・毛、切れ込み | なめらか、ろう質で青緑 |
設計への影響(2026-10-28 改め、全体を見る方針): 一株ずつ分類・追跡はしない。SAM は seedling などで芽の被覆の目安を出すだけ。Spark は写真全体を見て「大根とカイランの混ざり具合、勢い、偏り」を言い、農家が正誤を付ける。
播種: 2026-10-18、大根とカイランを混ぜてバラマキ。位置では作物を判別できないので、見た目だけが手がかり。記録には播種後日数(DAS: 10/27 = 9 日目)を入れる。
多種を混ぜて播いた場所。農家自身も「何が生えてくるかわからない」。大きなハート形の子葉(アブラナ科らしい)、赤紫の小さな葉、三つ葉、細かく切れ込んだ葉、イネ科の細い葉などが混ざっている。
1 つ目(大根とカイランの 2 種、播き筋あり)が易しい地点、2 つ目が難しい地点として対になる。
設計への影響:
- 一株ずつの同定はしない。播いた種のリストを渡し、Spark には「何が出てきているか、どれが優勢か」を全体として言わせる。分からないものは「不明」でよい。
無肥料にして 4 年目の自分の畑で、1 年間草を刈らずにおいた区画。見た目は耕作放棄地と同じで、放棄地を作物に戻す過程の代わりとして使う。写真(斜めから)に見えるもの:
| 見えているもの | 見立て | 確信度 |
|---|---|---|
| 黄色い穂状の花、細い葉が茎に密につく | セイタカアワダチソウ | 高 |
| 銀白色の穂、背の高い幅広のイネ科 | オギ(農家の同定。ススキではない) | 確定 |
| 右下の灰緑色で細かく裂けた葉、小さな花穂 | ヨモギ類 | 中 |
| 中央奥の丸い葉 | クズ? | 低 |
この地点の役割は「復活」の起点。9 日間で見せるのは:
オギは湿った土地を好む。ただし伏流水は地下約 4 m で(農家の知見)、地下水位が高いという私の推定は外れた。農家の見立てでは、土は黒色片岩(三波川帯)のシルト由来。シルトは細かく水を保つので、オギが育つ理由として「堆積土の保水性」が有力になる(地質図で要確認、GSJ は 10/28 もメンテ中)。刈り方と作物の提案では、オギと地下約 4 m の伏流水の両方を Spark に渡す。地図にない、こうした農家の知見を site.md に足していくこと自体が「人が答え合わせをする」例になる。
- 刈る前の読み: SAM で
goldenrod,silver grass,reedなどの被覆率。site.md に来歴(無肥料 4 年目、1 年刈らず)を書く。 - 刈り方の提案([F]、story.md 参照): Spark が最初に刈る場所と高さを、理由付きで一つ出す。農家が刈るか、却下して理由を言う。
- 刈った後: 同じ定点で、何が先に戻ってくるかを毎日記録する。
撮り方: 草丈が高いので、真上からは撮れない。刈る前は斜めの全景を同じ位置から、刈った後は刈った帯を真上から(1〜1.5 m)も撮る。
SAM の名詞句の候補(写真で試験して決める):
seedling, sprout, radish seedling, broccoli seedling, cotyledon, weed, bare soil, straw, dry grass, footprint, goldenrod, silver grass, reed, vine
Voice Transcribe の語彙バイアス候補: 大根, カイラン, 子葉, 本葉, 播き筋, 畝, 草マルチ, 刈り草, 足跡, 鹿, 猪, 乾いてる, 湿ってる, セイタカアワダチソウ, ススキ, オギ, ヨシ, ヨモギ, クズ, 放棄地
records/site.md の各行に状態を付ける: data(公開データ)/ record(農家がしたこと・見たこと)/ hypothesis(農家または AI の読み、未検証)/ supported・refuted(検証済み、根拠を書く)。
- 仮説は AI に前提として渡さない。調べる対象として渡す。
- 調べる主な手段は雑草(農家の方針)。何が、どこに、どれだけ生え、どう変わるかが、その畑の土・水・来歴への答えになる。毎日の写真(SAM の草種別被覆率、Spark の比較、農家の訂正)がその計器。
- 補助として ② Spark の検索グラウンディングで外の根拠(出典付きで「支持 / 反対 / 見つからない」)、③ 試し播きなどの試験。
- 「この草が生えるのは〇〇だから」という読み自体も仮説として扱い、同じように確かめる。
- 状態を変えるのは農家。AI の推定も農家の知見も同じ扱い。
- すでに
refutedが 3 件ある(ススキ→オギ、低い氾濫原→微高地、地下水位が高い→伏流水は約 4 m)。どれも AI の推定を農家が直したもの。デモで「答え合わせ」の実例として使える。
雑草で土を読む話の裏付け(2026-10-28 に検索):
- 考え方は広くある(自然農法、FiBL の技術ノート、各国の普及資料)。ただし指標の一覧は場所ごとに一致せず、専門家の間でも食い違う。厳密な検証研究はほとんど見つからない。検証が少ないうえに、精度も悪い(農家の評価)。ここがこの道具の出番: 一般の一覧で当てるのではなく、AI と一緒に定期的に観察し、どういう方法で改善したらいいかの知識を増やしていく(農家の方針)。毎日続けることが目的ではない。たまる知識の形は「何をした(刈り方、播いた物、時期)→ 草と作物がどう変わった → 農家の評価」。読みの精度はその副産物。
- 当たりやすいのは、一年草より多年草、1 種より一緒に生える草の組み合わせ。地域差が大きく、欧州の一覧はそのまま使えない。
- だからこの道具では、一般の指標表を答えにせず、この畑の草の組み合わせとその変化を、日々の記録で確かめていく。
- 茨城県農総センター: 放棄年数が長いとセイタカアワダチソウ・ススキ・オギ等の多年草が優占。ススキ・オギの根は約 30 cm。放棄地の下層はリン酸・石灰・窒素が不足。推奨する再生法は除草剤+プラウ耕+堆肥(外から入れる方法で、この企画とは逆)。
- 東北大の不耕起草生水田: 表層に有機物層はできるが、0〜30 cm の土壌炭素は慣行田と有意差なし(「地上ではなく土の中の有機物」という農家の指摘と関係する)。
新モジュール check/: 仮説 1 件 → Spark が雑草の記録を読み、どの草がどこに出れば支持・反対かを示す。加えて検索グラウンディングで外の根拠(出典 URL)。ハッカソン中は外の根拠まで。畑での確かめはシーズンをまたぐ。
記録の単位は畑。1 回の観察 = 1 枚の畑を歩いて、全体が分かるように写真を撮る(枚数は自由、声のメモは任意)。
- 畑を区画に分けるか、何か所から撮るかは農家の自由。アプリは区画数を決めない。写真のファイル名やメモで「北の端」などと書けば、Spark はそれを手がかりに読む。
- 見比べ方:
- 時期どうし(同じ畑の前回と): 畑全体がどう動いたか。刈った・播いた等の手入れの後に何が変わったか。
- 畑どうし(任意): 土も来歴も違う畑を並べると、草の違いが土・水・来歴の違いを語る(§1.6 の「雑草で読む」)。
- Spark には今回の写真と前回の写真をまとめて渡す(複数画像可)。出力は「畑全体 → 目立つ偏り → 前回からの変化」の順。
- 厳密な位置合わせは要らない。field-timelapse は、手入れの前後を重ねて見せたい所だけに使う。
- ハッカソン中はデータを揃えるため毎日〜隔日。その後は定期的(週 1 など)。
- これまでの 3 つの定点は、それぞれの畑の写真の一部として扱う。
雑草は土の酸度・肥沃さ・乾燥のバロメーターになる。従来の一覧表(一種 → 一つの答え)は検証が少なく精度も悪いので、AI では次のように読む。
- 組み合わせで読む: 写真に写る草全体とその割合から総合する。一種の指標植物で決めない。
- 様子も読む: 葉色(黄ばみ、赤紫)、勢い、草丈、密度、花の時期、しおれ方。乾燥は天気(雨のない日数)と並べて読む。
- およその値と相対の両方を出す(農家の指摘で改め): 酸度は pH の幅(例 5.5〜6.5)、肥沃さは 痩せ/中/肥沃、乾燥は 乾/適湿/湿 の 3 段階。それより細かくは言わせない。加えて向き:
- 時期: 同じ畑の前回と比べて
up(より酸性/より肥沃/より乾燥)・down・same・unclear - 畑どうし: 畑を並べ、最も酸性/肥沃/乾燥の側から順に並べる
- 時期: 同じ畑の前回と比べて
- 肥沃さは「植物が取れる量」: 土にあるミネラルの量ではなく、植物が自分で取れているかを生育から読む。この畑は黒色片岩由来でミネラルは豊富、ただし植物が自ら取れないと意味がない(農家)。
- 根拠と確信度を必ず付ける: どの草の、何を見てそう読んだか。草が何を示すかという読み自体が仮説なので、確信度で表す。草から言えなければ
unclear。 - 答え合わせ: 各バロメーターに農家が right / wrong(理由)を付ける。時々の簡易 pH 試験紙や土を握った感触を声のメモで残せば、pH の幅がこの畑で当たっているかを確かめられる。訂正は次回のプロンプトに戻り、この畑での読みが鍛えられる。
- 限界: 写真は地上だけ。根や土の構造は見えない。芽生えの時期は草の種類を取り違えやすい。
記録の行の形:
- dryness: dry; drier than 2026-10-27; evidence: オギの葉先が巻き、ヨモギがしおれている。5 日雨なし [0.55] → farmer: right
- fertility: richest → poorest: uncut (rich) > row1 (moderate) > mix1 (poor); evidence: ... [0.40]
コード: describe.py の時期比較に 3 つのバロメーターを足す。畑どうしは compare_fields() で各畑の最新の観察を並べ、records/_compare/<date>.md に残す(2 行目の例はこのファイルの行)。
農家の方針: 優勢になる雑草を調べれば、理由は分かるはず。これに野菜の生育状態を合わせて総合判断すれば、かなりの情報が得られる。
- 優勢な草を挙げる: 毎回の観察で、畑の中で優勢な草を 2〜4 種、和名+学名+およその割合で出す(
dominant)。全種を数えない。 - なぜ優勢なのかを調べる: 優勢な草ごとに、その草が優勢になる理由(好む pH、水分、肥沃さ、刈り取り・攪乱への反応、光、遷移の段階、根)を Spark に調べさせ、
records/_plants/<学名>.mdに残す。一度調べた草は再利用。各行は仮説で、確信度付き。農家が right / wrong を付けられる。 - 野菜の育ちを見る: 勢い、葉色、大きさ、揃い、ストレスの兆し(
crops)。野菜が写っていなければ省く。 - 総合判断: バロメーター(§1.8)は、優勢な草が優勢な理由から出発し、野菜の育ち、天気、地形・地質・土壌(
records/site.md)で照らし合わせて出す。地質・土壌は公開資料(産総研シームレス地質図、農研機構 日本土壌インベントリー、国土地理院 土地条件図)から取り、dataとして書く。site.md のhypothesis行は未検証、refuted行は誤りとしてモデルに渡す。草と野菜が違う方向を指すときは、そう書いて確信度を下げる。
出力の順: 畑全体 → 優勢な草 → 野菜の育ち → 酸度・肥沃さ・乾燥 → 変化。
周辺の情報(農家の指摘): 対象の畑だけでなく、周りも効く。隣の土地の使い方(田、果樹、畑、家、道、放棄地)、川・水路・旧河道、雑草の種や獣の出どころ、隣の施肥・除草剤。surroundings.py が国土地理院タイル(現在の空中写真、1974〜78 年・1961〜69 年の空中写真、標準地図、治水地形分類図)を畑を中心に約 1.5 km 四方で取り、Spark が一度だけ読んで records/surroundings.md に仮説として書く。農家が正誤を付け、隣の様子など地図にない知識は site.md の Surroundings に書く。どちらも総合判断に渡る。
地質図(GSJ)の API は 10/27・10/28 ともメンテナンス中。復旧したら site.md の Geology を data で埋める。
注意: 草の生態の説明は、検索グラウンディングで出典を付けるのが望ましい(API の指定方法は未確認、plants.py の TODO)。それまでは出典なしの仮説として扱う。
農家の要望: どういう緑肥がいいかを提案できるアプリにする。§1.9 までの「読む」の上に、「出す」を載せる最初の段(ストーリーの「その畑に合った刈り方と作物を出す」の作物の側)。
入力(すべてこの畑の記録から):
- 畑の最新の観察: 全体、優勢な草、野菜の育ち、酸度・肥沃さ・乾燥
- 優勢な草が優勢な理由(
records/_plants/) - 地形・地質・土壌・周辺(
site.md、surroundings.md)。農家の知見(例: 「ヘアリーベッチはこの畑では強すぎる」)を守る - 時期(日付から、徳島で今まけるもの)
- 手元の種(任意)。あればその中から組む
- この畑への過去の提案と、農家の正誤・理由
出力(records/_proposals/<field>/<date>-cover_crop.md、各行に農家が right / wrong を付ける):
- 要約
- 混植の組み合わせ: 種ごとに役割(根で耕す、窒素を入れる、太い根で穴を開ける、菌根菌をつなぐ、地表を覆う…)、およその割合、この畑での理由
- まき方・時期
- 注意(強すぎる種、窒素の取り合い、後作への影響、根粒菌など)
- 確かめ方: 何がどうなれば当たりか(芽生え、どれが優勢になるか、葉色、春の様子)。次からの観察でそのまま答え合わせする
方針: 単作でなく混植(リジェネラティブ農業、野草化栽培と同じ方向)。正確な播種量より、役割と割合の目安。アブラナ科は菌根菌と共生しないことを踏まえる。窒素はこの畑で足りない側。
農家の指摘: はじめて農業をする人は、こういう雑草がいっぱいの畑(放棄地や長く休んでいた畑)から始めることが多い。
この人たちには、この畑の農家が持っている知識(ススキとオギの見分け、洪水の当たり方、遺跡の記録、「ヘアリーベッチはここでは強すぎる」)がまだ無い。だから道具の役目が大きい。
- 最初の一回: 場所を入れると、公開資料から site.md の下地(標高、地質、土壌、周辺の地図、川の来歴)を作る。人が知っていることを足していく。
- 最初の観察: 畑を歩いて撮る → 優勢な草とその理由 → 最初の提案(どこから、どう刈るか/何をまくか)。
- 答え合わせを経験の代わりに: 経験が無い分、提案には必ず「何が見えたら当たりか」を付け、後の写真で確かめる。土を掘る、握るなど、すぐできる確かめ方も添える。
- 言葉: 提案と説明は日本語で、専門用語に一言の説明を付ける(いまの出力は英語。言語を切り替えられるようにする)。
デモでは、この畑(無肥料 4 年目、1 年刈らず)を「はじめての人が受け取る畑と同じ姿」として見せられる。
「1 年刈らなかった区画」のようなケースは多い(農家)。手が回らなかった区画、借りたばかりの休耕地など。耕作できなくなった人が手放した畑が、草に戻ったところで、はじめての人に渡る(農家)。放棄地とはじめての人は、同じ流れの両端にいる。
日本の夏は、3 か月もすれば畑が雑草で覆われる(農家)。手放してから次の人に渡るまでの短い間でも、畑は草に戻る。だから:
- 観察の間隔は季節で変える。夏は短く(1〜2 週ごと)、冬は長く(月 1 程度)。
- 刈り方の提案は「いつ刈るか」が中心になる。夏は遅れると 1 回で手に負えなくなる。だからこの区画は特殊な例ではなく、よくある出発点の代表としてデモに使える。
農家の方針: SAM に頼む名詞は間違ってもいい。これから直していけばいい。そして、それはみんなで共有する。
- 畑ごとの一覧
records/_concepts/<field>.md(concepts.py): 名詞ごとに、何の草のためか、誰が決めたか(ai / farmer / shared / default)、前回の結果(被覆率と数、または「見つからず」)。農家が wrong(理由、代わりの名詞)を付けると、その名詞は使わなくなり、代わりが農家の名詞として入る。 - 流れ: 前回の優勢な草 → 名詞がない草には名詞を用意 → SAM(
segment_field)→ 結果を一覧に書き戻す → 農家が直す。 - 共有ライブラリ
shared/sam_concepts.md: 草(学名)ごとに名詞と、農家たちの right / wrong の数。場所や農家の情報は持たない。ある畑で名詞が要るときは、まず共有ライブラリの一番良いもの(right が wrong より多い)を使い、無いときだけモデルに聞く。共有ライブラリで外れとされた名詞は、モデルに「使うな」と渡す。 - コードと一緒にリポジトリに入るので、OSS と同じく他の農家が使い、直し、送り返せる。
農家の要望: 写真をフォルダに置く作業が面倒。iPhone でも Android でも、畑からでも家からでも送れるようにする。
形: debpc で動く小さな Web アプリ(Python のサーバー+スマホ向けの 1 画面の HTML)。iPhone は Safari、Android は Chrome で開き、ホーム画面に置けばアプリのように使える。どちらも同じ画面で、App Store / Play ストアも Mac も要らない。iPhone の HEIC はサーバーで JPEG に直す。
使い方の基本(2026-10-28 農家の方針): 畑ではすぐに送らなくていい。畑ではいつものカメラで撮り(声のメモもスマホの録音で)、家に帰ってから家の Wi-Fi でまとめて送って処理する。これなら畑で電波も外からの接続も要らない。写真の撮影日時が残るので、日付は自動で合う。
畑から送りたくなったとき(後回し): Tailscale(iPhone・Android とも公式アプリあり)でスマホと debpc を私的なネットワークでつなぐ。ポートを外に開けずに携帯回線から届き、tailscale serve で正規の HTTPS になる。HTTPS は、Safari でも Chrome でも、マイクと位置情報を使うための条件でもある。Tailscale の導入とログインは農家が行う。
画面の流れ:
- 畑を選ぶ: 位置情報で一番近い畑を自動で選ぶ(違えば 1 タップで変える)。新しい畑はその場の位置で登録。
- 撮る: カメラで何枚でも。家ではカメラロールから選ぶ。日付は写真の撮影日時(なければ今日)で、画面で直せる。
- 送る: サーバーが
photos/<畑>/<日付>/に自動で置く。フォルダ作業は無くなる。 - 読む: SAM と Spark が裏で動き、終わると畑全体 → 優勢な草 → 野菜 → バロメーター → 変化が出る。SAM の切り分けを写真に重ねて見せる。
- 答え合わせ: 各項目に ✓ / ✗。✗ は理由を声か文字で。SAM の名詞もここで直す(§1.12)。
- 声のメモ: 押して話す → Muse Voice Transcribe(日本語)→ 文字になって記録へ。録音はブラウザで WAV にしてから送る(サーバーに ffmpeg は要らない)。
作る順: ① 送る→自動で置く(今日)② 読む→答え合わせ ③ 声。①だけでも面倒な作業が無くなる。②③はハッカソンの「人が確かめる」の入口で、デモの画面そのものになる。
スマホ写真 (+ 任意の音声メモ)
│
▼
[A] 位置合わせ(任意) ← field-timelapse(ハッカソン前の既存コード。境界をここで明示)
│ 手入れの前後を重ねたい所だけ。入力: photos/<field>/<date>/*.jpg
▼
[B] 切り分け ← SAM 3.1(新規)
│ 概念ごとに1リクエスト。マスク → 被覆率(%) と位置を CSV/JSON に。
▼
[C] 比較説明 ← Muse Spark 1.3(新規)
│ 入力: その畑の今回の写真+前回の写真、[B] の被覆率(目安)、天気(Open-Meteo)
│ 出力: JSON(畑全体 → 目立つ偏り → 前回からの変化、確信度)
▼
[D] 検証 ← Muse Voice Transcribe + 簡単な UI(新規)
│ 農家の音声メモを文字起こし。AI の各項目に right / wrong / 訂正 を付ける。
▼
[E] 記録 ← プレーンテキスト(新規)
records/<field>/<date>.md … 1 枚の畑の 1 回の観察で 1 ファイル。写真、被覆率、AI の説明、農家の判定、天気
→ 訂正済みの例は次の観察の [C] のプロンプトに few-shot として戻す
[A] は申請書で「already built」と書いた部分。リポジトリでは別ディレクトリ(または git submodule)にして、ハッカソン中に書いたコードと履歴で区別する。
1 枚の畑の 1 回の観察で 1 ファイル。人も AI も読める Markdown + YAML front matter。
---
field: north-field
date: 2026-10-28
photos: [photos/north-field/2026-10-28/north-end.jpg, photos/north-field/2026-10-28/middle.jpg]
weather: {rain_mm: 0, tmax: 21.3, tmin: 12.8, days_since_rain: 3}
coverage: {weed: 61.2, bare_soil: 18.5, crop: 20.3} # SAM 3.1, % of frame
---
## AI observation (muse-spark-1.3)
- leaf_colour: daikon leaves slightly paler than 10-26 → farmer: wrong (same colour, morning light)
- weed_height: ~15cm, +2cm vs 10-26 → farmer: right
- soil: dry surface, cracks visible → farmer: right
- animal: no new tracks → farmer: wrong (deer track at NE corner)
## Farmer note (muse-voice-transcribe, ja)
北の畝、土は乾いてる。北東の角に鹿の足跡。葉色は変わってない。訂正は構造化(farmer: wrong + 理由)して残す。これが「人が検証した」証拠であり、次日の few-shot にもなる。
| # | モジュール | 内容 | 優先 |
|---|---|---|---|
| 1 | segment/ |
SAM 3.1 呼び出し、出力トークンのパース、マスク → 被覆率 | 高 |
| 2 | describe/ |
畑の今回+前回の写真を Spark へ。全体 → 偏り → 変化の JSON、few-shot | 高 |
| 3 | records/ |
畑ごと・観察ごとに 1 ファイルの読み書き、天気の取り込み | 高 |
| 4 | verify/ |
Voice Transcribe 呼び出し、判定 UI(最小: CLI か Flet の1画面) | 中 |
| 5 | local/ |
Glimmer(Ollama)で [C] の軽量版を動かす経路 | 中 |
| 6 | report/ |
期間の全体の様子の並び(写真と一言)、被覆率の目安の推移 | 中 |
- SAM: 4概念 × 3畑 × 写真 3 枚 × 9回 ≈ 324 画像 ≈ $0.8
- Spark: 1 回の観察で画像約 20 枚(今回+前回)≈ 40k トークン入力、2k 出力 ≈ $0.06。9 回で $0.5。試行錯誤で ×20 しても $10 程度。
- Voice: 1日 3分 × 9日 ≈ $0.1
→ 余裕があるので、プロンプトの試行錯誤に惜しまず使える。
story.md の順に話す。細部の技術説明は README に回す。
- 外に頼る農業(30秒): 肥料も使い方も外から。会社が情報システムを業者に預けてきたのと同じ。リン鉱石の7割はモロッコ、中国は輸出を絞っている。
- 変え方(20秒): 畑の中の力で回す。ただし畑ごとに違うので、上から一つのやり方は配れない。耕作放棄地は約42万ha、富山県ほど。
- 道具(70秒): 徳島の畑を歩いて撮る → SAM が草と作物の割合の目安を出す → Spark が畑全体を言い、偏りと前回からの変化を読む(畑どうしも並べられる)→ 農家が声で答え合わせ。
- 放棄地と同じ姿の区画(30秒): 無肥料 4 年目、1 年刈らずにこうなった。セイタカアワダチソウとオギの土地を読み、Spark が最初に刈る場所と高さを出す → 刈る → 数日で何が戻ってきたか。
- 9日間(20秒): 全体の様子と農家の訂正の並び。「何をしたら、どう変わったか」がたまっていく。記録は手元のテキスト、Glimmer なら自宅だけで動く。
- 締め(10秒): 農家一人一人が、業者や指導を通さずに自分の畑を読めるようになる。
| 日 | やること |
|---|---|
| 10/27 (火) | 写真撮影開始。設計確定。git 初期化。SAM をプレイグラウンドと API で試す。 |
| 10/28 (水) | segment/ 完成。被覆率が出る。records/ の形を固める。 |
| 10/29 (木) | describe/ 完成。2日分の比較が JSON で出る。 |
| 10/30 (金) | verify/(音声+判定)。few-shot の戻し。 |
| 10/31 (土)〜11/1 (日) | Glimmer ローカル経路。report/。毎日のデータ処理を続ける。 |
| 11/2 (月) | README、コードの整理、Muse Code 使用箇所の記録。 |
| 11/3 (火) | デモ動画撮影・編集。 |
| 11/4 (水) | 予備。提出(日本時間 11/5 11:00 まで)。 |
| 機械 | 構成 | 役割 |
|---|---|---|
| debpc(このセッション) | Intel 内蔵 GPU、RAM 62GB | 開発機。[A]〜[E] のコードと、SAM / Spark / Voice の API 呼び出し。 |
| MINISFORUM MS-S1 MAX | Ryzen AI Max+ 395、ユニファイド 128GB | Glimmer サーバー。llama.cpp か Ollama で OpenAI 互換 HTTP を出し、debpc から LAN 越しに叩く。bf16 でも載るが、まず Q8 で速度を見る。 |
| GeForce RTX 3070 | VRAM 8GB | Glimmer 30B は載らない(4bit でも約 18GB)。今回は使わない。 |
describe/ は base_url を切り替えるだけで Spark(api.meta.ai)と Glimmer(MS-S1 MAX)の両方を向けるようにする。両者とも OpenAI 互換なので同じクライアントコードで済む。
- MS-S1 MAX(Linux, 192.168.100.6): ping は通るが 22/11434 が閉じている(10/27 時点)。
sudo ss -tlnp | grep -E ':22|:11434'で待ち受けを確認。手順はscripts/setup-glimmer-server.sh。 - field-timelapse の場所と入出力形式
- SAM に効く概念名(写真が来てから Playground で試す)
- 天気の日別値: Open-Meteo の過去データ API を畑の座標で叩く(2026-10-27 決定、
src/fieldnotes/weather.py)。自前サイトの NetCDF は 57 官署のみで徳島が入っていなかった。 - 地点プロファイル
records/site.md: 地質(GSJ がメンテ中)、土壌、来歴が未記入 - クレジット反映の確認(2026-10-28 農家が受け取りを確認)
- 本体は上の計画どおり進める。
- 記録に基づいて買い手の質問に答えるエージェント(Spark のツール呼び出しで
records/を検索し、記録にあることだけを答える)は、11/1 までに B〜D が動いていればおまけとしてデモ末尾に入れる。動いていなければハッカソン後に回す。 - 本格的な商店(出品、価格交渉、決済、エージェント同士の交渉)はハッカソン後の別プロジェクト。この記録を根拠データとして使う方向で考える。
- その先: 新しい販売組織を作る(2026-10-28 農家)。農協が入口(肥料・農薬の販売)と出口(出荷)を握る形の外に、自然農の農家どうしの販売の仕組みを作る。共通の形式の記録(プレーンテキスト、農家の答え合わせ付き)が、参加の条件と買い手への説明になる。OSS がコミュニティや財団を作ってきたのと同じ形。
- 畑の近所も撮る。隣の畑のやり方(除草剤、耕起)、川、耕作放棄地、昔の屋敷など。地図では見えないものを、畑を読むときの背景にする(
around.py、photos/_around/)。 - 畑の写真は家の写真より、セキュリティの心配が少ない。写るのは土地で、家の中や人ではない。
- 盗難が問題になったら、固定のビデオカメラを置くことも考えられる。同じ記録の仕組みに、定点の写真として入れられる(まだ作らない)。