1import{_ as i,c as a,d as n,o as l}from"./app-rplj-UlT.js";const h={};function e(k,s){return l(),a("div",null,[...s[0]||(s[0]=[n(`<p>æºè½ç¼éä¸å± AI 婿 - 为 Meta Ray-Ban æºè½ç¼é设计ç夿¨¡æ Agentï¼å®æ¶è§è§é®çååºæ¯çè§£ã</p><h2 id="æ ¸å¿ç¹æ§" tabindex="-1"><a class="header-anchor" href="#æ ¸å¿ç¹æ§"><span>æ ¸å¿ç¹æ§</span></a></h2><h3 id="宿¶è§è§çè§£" tabindex="-1"><a class="header-anchor" href="#宿¶è§è§çè§£"><span>宿¶è§è§çè§£</span></a></h3><ul><li>æå头宿¶ç»é¢åæ</li><li>ç©ä½è¯å«ååºæ¯çè§£</li><li>OCR æåè¯å«</li><li>人è¸è¯å«ï¼å¯éï¼</li></ul><h3 id="夿¨¡æäº¤äº" tabindex="-1"><a class="header-anchor" href="#夿¨¡æäº¤äº"><span>夿¨¡æäº¤äº</span></a></h3><ul><li>è§è§ + è¯é³å模æè¾å ¥</li><li>èªç¶è¯è¨é®ç</li><li>宿¶ç¿»è¯</li><li>导èªè¾ å©</li></ul><h3 id="ä½å»¶è¿å¤ç" tabindex="-1"><a class="header-anchor" href="#ä½å»¶è¿å¤ç"><span>ä½å»¶è¿å¤ç</span></a></h3><ul><li>è¾¹ç¼è®¡ç®ä¼å</li><li>æµå¼å¤ç</li><li>颿µæ§å è½½</li><li>æºè½ç¼å</li></ul><h3 id="éç§ä¿æ¤" tabindex="-1"><a class="header-anchor" href="#éç§ä¿æ¤"><span>éç§ä¿æ¤</span></a></h3><ul><li>æ¬å°å¾åé¢å¤ç</li><li>ææä¿¡æ¯è¿æ»¤</li><li>ç¨æ·æ°æ®å å¯</li><li>å¯é ç½®éç§çº§å«</li></ul><h2 id="å¿«éå¼å§" tabindex="-1"><a class="header-anchor" href="#å¿«éå¼å§"><span>å¿«éå¼å§</span></a></h2><h3 id="ç¡¬ä»¶è¦æ±" tabindex="-1"><a class="header-anchor" href="#ç¡¬ä»¶è¦æ±"><span>ç¡¬ä»¶è¦æ±</span></a></h3><ul><li>Meta Ray-Ban Stories æºè½ç¼é</li><li>é 对ç iPhone/Android ææº</li><li>èç 5.0+</li></ul><h3 id="å®è£ " tabindex="-1"><a class="header-anchor" href="#å®è£ "><span>å®è£ </span></a></h3><div class="language-bash line-numbers-mode" data-highlighter="shiki" data-ext="bash" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212;"><pre class="shiki shiki-themes vitesse-light vitesse-dark vp-code"><code class="language-bash"><span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD;"># å éä»åº</span></span> 2<span class="line"><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">git</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;"> clone</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;"> https://github.com/sseanliu/VisionClaw.git</span></span> 3<span class="line"><span style="--shiki-light:#998418;--shiki-dark:#B8A965;">cd</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;"> VisionClaw</span></span> 4<span class="line"></span> 5<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD;"># å®è£ ä¾èµ</span></span> 6<span class="line"><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">pip</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;"> install</span><span style="--shiki-light:#A65E2B;--shiki-dark:#C99076;"> -r</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;"> requirements.txt</span></span> 7<span class="line"></span> 8<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD;"># é ç½® API Key</span></span> 9<span class="line"><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676;">export</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A;"> ANTHROPIC_API_KEY</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">=</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A;">your_api_key</span></span> 10<span class="line"><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676;">export</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A;"> OPENAI_API_KEY</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">=</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A;">your_openai_key</span><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD;"> # ç¨äºè§è§æ¨¡å</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="é ç½®" tabindex="-1"><a class="header-anchor" href="#é ç½®"><span>é ç½®</span></a></h3><p>å建 <code>config.yaml</code>:</p><div class="language-yaml line-numbers-mode" data-highlighter="shiki" data-ext="yaml" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212;"><pre class="shiki shiki-themes vitesse-light vitesse-dark vp-code"><code class="language-yaml"><span class="line"><span style="--shiki-light:#998418;--shiki-dark:#B8A965;">device</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">:</span></span> 11<span class="line"><span style="--shiki-light:#998418;--shiki-dark:#B8A965;"> name</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">:</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> "</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">Meta Ray-Ban</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">"</span></span> 12<span class="line"><span style="--shiki-light:#998418;--shiki-dark:#B8A965;"> bluetooth_address</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">:</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> "</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">XX:XX:XX:XX:XX:XX</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">"</span></span> 13<span class="line"><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> </span></span> 14<span class="line"><span style="--shiki-light:#998418;--shiki-dark:#B8A965;">vision</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">:</span></span> 15<span class="line"><span style="--shiki-light:#998418;--shiki-dark:#B8A965;"> model</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">:</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> "</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">gpt-4-vision-preview</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">"</span></span> 16<span class="line"><span style="--shiki-light:#998418;--shiki-dark:#B8A965;"> max_resolution</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">:</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;"> 1280x720</span></span> 17<span class="line"><span style="--shiki-light:#998418;--shiki-dark:#B8A965;"> frame_rate</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">:</span><span style="--shiki-light:#2F798A;--shiki-dark:#4C9A91;"> 2</span><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD;"> # æ¯ç§å¤ç帧æ°</span></span> 18<span class="line"><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> </span></span> 19<span class="line"><span style="--shiki-light:#998418;--shiki-dark:#B8A965;">audio</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">:</span></span> 20<span class="line"><span style="--shiki-light:#998418;--shiki-dark:#B8A965;"> sample_rate</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">:</span><span style="--shiki-light:#2F798A;--shiki-dark:#4C9A91;"> 16000</span></span> 21<span class="line"><span style="--shiki-light:#998418;--shiki-dark:#B8A965;"> channels</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">:</span><span style="--shiki-light:#2F798A;--shiki-dark:#4C9A91;"> 1</span></span> 22<span class="line"><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> </span></span> 23<span class="line"><span style="--shiki-light:#998418;--shiki-dark:#B8A965;">privacy</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">:</span></span> 24<span class="line"><span style="--shiki-light:#998418;--shiki-dark:#B8A965;"> blur_faces</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">:</span><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;"> true</span></span> 25<span class="line"><span style="--shiki-light:#998418;--shiki-dark:#B8A965;"> filter_sensitive</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">:</span><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;"> true</span></span> 26<span class="line"><span style="--shiki-light:#998418;--shiki-dark:#B8A965;"> local_processing</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">:</span><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;"> true</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="å¯å¨" tabindex="-1"><a class="header-anchor" href="#å¯å¨"><span>å¯å¨</span></a></h3><div class="language-bash line-numbers-mode" data-highlighter="shiki" data-ext="bash" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212;"><pre class="shiki shiki-themes vitesse-light vitesse-dark vp-code"><code class="language-bash"><span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD;"># å¯å¨æå¡</span></span> 27<span class="line"><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">python</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;"> main.py</span><span style="--shiki-light:#A65E2B;--shiki-dark:#C99076;"> --config</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;"> config.yaml</span></span> 28<span class="line"></span> 29<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD;"># é 对ç¼é</span></span> 30<span class="line"><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">python</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;"> pair_device.py</span></span> 31<span class="line"></span> 32<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD;"># è¿è¡æµè¯</span></span> 33<span class="line"><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">python</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;"> test_vision.py</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2 id="ææ¯æ¶æ" tabindex="-1"><a class="header-anchor" href="#ææ¯æ¶æ"><span>ææ¯æ¶æ</span></a></h2><h3 id="ç³»ç»æ¶æ" tabindex="-1"><a class="header-anchor" href="#ç³»ç»æ¶æ"><span>ç³»ç»æ¶æ</span></a></h3><div class="language- line-numbers-mode" data-highlighter="shiki" data-ext="" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212;"><pre class="shiki shiki-themes vitesse-light vitesse-dark vp-code"><code class="language-"><span class="line"><span>âââââââââââââââââââââââââââââââââââââââ</span></span> 34<span class="line"><span>â Meta Ray-Ban æºè½ç¼é â</span></span> 35<span class="line"><span>â ââââââââââââ ââââââââââââ â</span></span> 36<span class="line"><span>â â æå头 â â 麦å é£ â â</span></span> 37<span class="line"><span>â ââââââââââââ ââââââââââââ â</span></span> 38<span class="line"><span>â â â â</span></span> 39<span class="line"><span>â ââââââââââ¬ââââââââ â</span></span> 40<span class="line"><span>â â èç â</span></span> 41<span class="line"><span>ââââââââââââââââââââ¼âââââââââââââââââââ</span></span> 42<span class="line"><span> â</span></span> 43<span class="line"><span>ââââââââââââââââââââ¼âââââââââââââââââââ</span></span> 44<span class="line"><span>â ææº App â â</span></span> 45<span class="line"><span>â âââââââââââââââââ¼âââââââââââââââââ â</span></span> 46<span class="line"><span>â â VisionClaw å¤ç弿 â â</span></span> 47<span class="line"><span>â â ââââââââââââ ââââââââââââ â â</span></span> 48<span class="line"><span>â â â è§è§å¤ç â â è¯é³å¤ç â â â</span></span> 49<span class="line"><span>â â ââââââââââââ ââââââââââââ â â</span></span> 50<span class="line"><span>â â ââââââââââââââââââââââââââââ â â</span></span> 51<span class="line"><span>â â â 夿¨¡æèå弿 â â â</span></span> 52<span class="line"><span>â â ââââââââââââââââââââââââââââ â â</span></span> 53<span class="line"><span>â ââââââââââââââââââââââââââââââââââ â</span></span> 54<span class="line"><span>âââââââââââââââââââââââââââââââââââââââ</span></span> 55<span class="line"><span> â</span></span> 56<span class="line"><span> â HTTPS</span></span> 57<span class="line"><span> â¼</span></span> 58<span class="line"><span>âââââââââââââââââââââââââââââââââââââââ</span></span> 59<span class="line"><span>â LLM API (Claude/GPT) â</span></span> 60<span class="line"><span>âââââââââââââââââââââââââââââââââââââââ</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="è§è§å¤çæµç¨" tabindex="-1"><a class="header-anchor" href="#è§è§å¤çæµç¨"><span>è§è§å¤çæµç¨</span></a></h3><div class="language-python line-numbers-mode" data-highlighter="shiki" data-ext="python" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212;"><pre class="shiki shiki-themes vitesse-light vitesse-dark vp-code"><code class="language-python"><span class="line"><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;
60">import</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> cv2</span></span> 61<span class="line"><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;">from</span><span style="--shiki-light:#A65E2B;--shiki-dark:#C99076;"> PIL</span><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;"> import</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> Image</span></span> 62<span class="line"></span> 63<span class="line"><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676;">class</span><span style="--shiki-light:#2E8F82;--shiki-dark:#5DA994;"> VisionProcessor</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">:</span></span> 64<span class="line"><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676;"> def</span><span style="--shiki-light:#998418;--shiki-dark:#B8A965;"> __init__</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">(</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">self</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">):</span></span> 65<span class="line"><span style="--shiki-light:#A65E2B;--shiki-dark:#C99076;"> self</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">.</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">frame_buffer </span><span style="--shiki-light:#999999;--shiki-dark:#666666;">=</span><span style="--shiki-light:#999999;--shiki-dark:#666666;"> []</span></span> 66<span class="line"><span style="--shiki-light:#A65E2B;--shiki-dark:#C99076;"> self</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">.</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">last_analysis </span><span style="--shiki-light:#999999;--shiki-dark:#666666;">=</span><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;"> None</span></span> 67<span class="line"><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> </span></span> 68<span class="line"><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676;"> async</span><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676;"> def</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665;"> process_frame</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">(</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">self</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">,</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> frame</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">:</span><span style="--shiki-light:#998418;--shiki-dark:#B8A965;"> bytes</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">)</span><span style="--shiki-light:#999999;--shiki-dark:#666666;"> -></span><span style="--shiki-light:#998418;--shiki-dark:#B8A965;"> dict</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">:</span></span> 69<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD;"> # è§£ç å¾å</span></span> 70<span class="line"><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> image </span><span style="--shiki-light:#999999;--shiki-dark:#666666;">=</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> Image</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">.</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">open</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">(</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">io</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">.</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">BytesIO</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">(</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">frame</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">))</span></span> 71<span class="line"><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> </span></span> 72<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD;"> # é¢å¤ç</span></span> 73<span class="line"><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> image </span><span style="--shiki-light:#999999;--shiki-dark:#666666;">=</span><span style="--shiki-light:#A65E2B;--shiki-dark:#C99076;"> self</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">.</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">preprocess</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">(</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">image</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">)</span></span> 74<span class="line"><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> </span></span> 75<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD;"> # éç§è¿æ»¤</span></span> 76<span class="line"><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;"> if</span><span style="--shiki-light:#A65E2B;--shiki-dark:#C99076;"> self</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">.</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">config</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">.</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">blur_faces</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">:</span></span> 77<span class="line"><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> image </span><span style="--shiki-light:#999999;--shiki-dark:#666666;">=</span><span style="--shiki-light:#A65E2B;--shiki-dark:#C99076;"> self</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">.</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">blur_faces</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">(</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">image</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">)</span></span> 78<span class="line"><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> </span></span> 79<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD;"> # åéå° LLM</span></span> 80<span class="line"><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> result </span><span style="--shiki-light:#999999;--shiki-dark:#666666;">=</span><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;"> await</span><span style="--shiki-light:#A65E2B;--shiki-dark:#C99076;"> self</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">.</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">analyze_image</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">(</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">image</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">)</span></span> 81<span class="line"><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> </span></span> 82<span class="line"><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;"> return</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> result</span></span> 83<span class="line"><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> </span></span> 84<span class="line"><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676;"> def</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665;"> preprocess</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">(</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">
84self</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">,</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> image</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">:</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> Image</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">)</span><span style="--shiki-light:#999999;--shiki-dark:#666666;"> -></span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> Image</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">:</span></span> 85<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD;"> # è°æ´å¤§å°</span></span> 86<span class="line"><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> image </span><span style="--shiki-light:#999999;--shiki-dark:#666666;">=</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> image</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">.</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">resize</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">((</span><span style="--shiki-light:#2F798A;--shiki-dark:#4C9A91;">1280</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">,</span><span style="--shiki-light:#2F798A;--shiki-dark:#4C9A91;"> 720</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">))</span></span> 87<span class="line"><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> </span></span> 88<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD;"> # å¢å¼ºå¯¹æ¯åº¦</span></span> 89<span class="line"><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> enhancer </span><span style="--shiki-light:#999999;--shiki-dark:#666666;">=</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> ImageEnhance</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">.</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">Contrast</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">(</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">image</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">)</span></span> 90<span class="line"><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> image </span><span style="--shiki-light:#999999;--shiki-dark:#666666;">=</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> enhancer</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">.</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">enhance</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">(</span><span style="--shiki-light:#2F798A;--shiki-dark:#4C9A91;">1.5</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">)</span></span> 91<span class="line"><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> </span></span> 92<span class="line"><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;"> return</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> image</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="夿¨¡æèå" tabindex="-1"><a class="header-anchor" href="#夿¨¡æèå"><span>夿¨¡æèå</span></a></h3><div class="language-python line-numbers-mode" data-highlighter="shiki" data-ext="python" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212;"><pre class="shiki shiki-themes vitesse-light vitesse-dark vp-code"><code class="language-python"><span class="line"><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676;">class</span><span style="--shiki-light:#2E8F82;--shiki-dark:#5DA994;"> MultimodalFusion</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">:</span></span> 93<span class="line"><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676;"> async</span><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676;"> def</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665;"> process</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">(</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">
93self</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">,</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> vision_input</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">:</span><span style="--shiki-light:#998418;--shiki-dark:#B8A965;"> dict</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">,</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> audio_input</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">:</span><span style="--shiki-light:#998418;--shiki-dark:#B8A965;"> str</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">)</span><span style="--shiki-light:#999999;--shiki-dark:#666666;"> -></span><span style="--shiki-light:#998418;--shiki-dark:#B8A965;"> str</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">:</span></span> 94<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD;"> # æå»ºå¤æ¨¡ææç¤º</span></span> 95<span class="line"><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> prompt </span><span style="--shiki-light:#999999;--shiki-dark:#666666;">=</span><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676;"> f</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">"""</span></span> 96<span class="line"><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;"> ç¨æ·æ£å¨ç: </span><span style="--shiki-light:#A65E2B;--shiki-dark:#C99076;">{</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">vision_input</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">[</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">'</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">description</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">'</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">]</span><span style="--shiki-light:#A65E2B;--shiki-dark:#C99076;">}</span></span> 97<span class="line"><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;"> ç¨æ·è¯´: </span><span style="--shiki-light:#A65E2B;--shiki-dark:#C99076;">{</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">audio_input</span><span style="--shiki-light:#A65E2B;--shiki-dark:#C99076;">}</span></span> 98<span class="line"><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;"> </span></span> 99<span class="line"><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;"> è¯·æ ¹æ®è§è§åè¯é³ä¿¡æ¯åçç¨æ·çé®é¢ã</span></span> 100<span class="line"><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;"> """</span></span> 101<span class="line"><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> </span></span> 102<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD;"> # è°ç¨ LLM</span></span> 103<span class="line"><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> response </span><span style="--shiki-light:#999999;--shiki-dark:#666666;">=</span><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;"> await</span><span style="--shiki-light:#A65E2B;--shiki-dark:#C99076;"> self</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">.</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">llm</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">.</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">generate</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">(</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">prompt</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">)</span></span> 104<span class="line"><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> </span></span> 105<span class="line"><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;"> return</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> response</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2 id="åè½ç¹æ§" tabindex="-1"><a class="header-anchor" href="#åè½ç¹æ§"><span>åè½ç¹æ§</span></a></h2><h3 id="宿¶åºæ¯çè§£" tabindex="-1"><a class="header-anchor" href="#宿¶åºæ¯çè§£"><span>宿¶åºæ¯çè§£</span></a></h3><div class="language-python line-numbers-mode" data-highlighter="shiki" data-ext="python" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212;"><pre class="shiki shiki-themes vitesse-light vitesse-dark vp-code"><code class="language-python"><span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD;"># åºæ¯æè¿°</span></span> 106<span class="line"><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">scene </span><span style="--shiki-light:#999999;--shiki-dark:#666666;">=</span><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;"> await</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> vision</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">.</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">
106describe_scene</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">()</span></span> 107<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD;"># "ä½ æ£å¨ä¸å®¶åå¡åºéï¼åæ¹æä¸ä¸ªæ¶é¶å°ï¼å·¦è¾¹æå å¼ æ¡å"</span></span> 108<span class="line"></span> 109<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD;"># ç©ä½è¯å«</span></span> 110<span class="line"><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">objects </span><span style="--shiki-light:#999999;--shiki-dark:#666666;">=</span><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;"> await</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> vision</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">.</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">detect_objects</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">()</span></span> 111<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD;"># ["å塿¯", "ç¬è®°æ¬çµè", "ææº", "é±å "]</span></span> 112<span class="line"></span> 113<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD;"># æåè¯å«</span></span> 114<span class="line"><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">text </span><span style="--shiki-light:#999999;--shiki-dark:#666666;">=</span><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;"> await</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> vision</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">.</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">read_text</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">()</span></span> 115<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD;"># "èå: ç¾å¼åå¡ $3.50, æ¿é $4.50"</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="æºè½é®ç" tabindex="-1"><a class="header-anchor" href="#æºè½é®ç"><span>æºè½é®ç</span></a></h3><div class="language-python line-numbers-mode" data-highlighter="shiki" data-ext="python" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212;"><pre class="shiki shiki-themes vitesse-light vitesse-dark vp-code"><code class="language-python"><span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD;"># ç¨æ·é®: "è¿ä¸ªå¤å°é±?"</span></span> 116<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD;"># ç³»ç»çå°èåä¸çä»·æ ¼</span></span> 117<span class="line"><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">answer </span><span style="--shiki-light:#999999;--shiki-dark:#666666;">=</span><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;"> await</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> agent</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">.</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">answer_question</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">(</span></span> 118<span class="line"><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A;"> question</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">=</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">"</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">è¿ä¸ªå¤å°é±?</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">"</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">,</span></span> 119<span class="line"><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A;"> context</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">=</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">vision_context</span></span> 120<span class="line"><span style="--shiki-light:#999999;--shiki-dark:#666666;">)</span></span> 121<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD;"># "ç¾å¼å塿¯ 3.50 ç¾å "</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="宿¶ç¿»è¯" tabindex="-1"><a class="header-anchor" href="#宿¶ç¿»è¯"><span>宿¶ç¿»è¯</span></a></h3><div class="language-python line-numbers-mode" data-highlighter="shiki" data-ext="python" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212;"><pre class="shiki shiki-themes vitesse-light vitesse-dark vp-code"><code class="language-python"><span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD;"># è¯å«å¤è¯æåå¹¶ç¿»è¯</span></span> 122<span class="line"><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">text </span><span style="--shiki-light:#999999;--shiki-dark:#666666;">=</span><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;"> await</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> vision</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">.</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">read_text</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">()</span></span> 123<span class="line"><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">translation </span><span style="--shiki-light:#999999;--shiki-dark:#666666;">=</span><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;"> await</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> translator</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">.</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">translate</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">(</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">text</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">,</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A;"> target_lang</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">=</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">"</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">zh</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">"</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">)</span></span> 124<span class="line"></span> 125<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD;"># è¯é³ææ¥ç¿»è¯ç»æ</span></span> 126<span class="line"><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;">await</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> tts</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">.</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">speak</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">(</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">translation</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">)</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="导èªè¾ å©" tabindex="-1"><a class="header-anchor" href="#导èªè¾ å©"><span>导èªè¾ å©</span></a></h3><div class="language-python line-numbers-mode" data-highlighter="shiki" data-ext="python" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212;"><pre class="shiki shiki-themes vitesse-light vitesse-dark vp-code"><code class="language-python"><span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD;"># è¯å«è·¯æ åæ¹å</span></span> 127<span class="line"><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">signs </span><span style="--shiki-light:#999999;--shiki-dark:#666666;">=</span><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;"> await</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> vision</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">.</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">detect_signs</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">()</span></span> 128<span class="line"><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">direction </span><span style="--shiki-light:#999999;--shiki-dark:#666666;">=</span><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;"> await</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> navigator</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">.</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">get_direction</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">(</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">signs</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">)</span></span> 129<span class="line"></span> 130<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD;"># "åæ¹ 50 米左转"</span></span> 131<span class="line"><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;">await</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> tts</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">.</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">speak</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">(</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">direction</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">)</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2 id="éç¨åºæ¯" tabindex="-1"><a class="header-anchor" href="#éç¨åºæ¯"><span>éç¨åºæ¯</span></a></h2><h3 id="æ¥å¸¸çæ´»" tabindex="-1"><a class="header-anchor" href="#æ¥å¸¸çæ´»"><span>æ¥å¸¸çæ´»</span></a></h3><ul><li>è´ç©æ¶æ¥çååä¿¡æ¯</li><li>é 读èååæ è¯</li><li>è¯å«éçç©å</li><li>宿¶ç¿»è¯å¤è¯</li></ul><h3 id="æ æ¸¸åºè¡" tabindex="-1"><a class="header-anchor" href="#æ æ¸¸åºè¡"><span>æ æ¸¸åºè¡</span></a></h3><ul><li>æ¯ç¹ä»ç»</li><li>è·¯æ è¯å«</li><li>å°å¾å¯¼èª</li><li>è¯è¨ç¿»è¯</li></ul><h3 id="å¦ä¹ å·¥ä½" tabindex="-1"><a class="header-anchor" href="#å¦ä¹ å·¥ä½"><span>å¦ä¹ å·¥ä½</span></a></h3><ul><li>
131ä¼è®®è®°å½</li><li>ææ¡£æ«æ</li><li>ç¥è¯æ¥è¯¢</li><li>宿¶ç¬è®°</li></ul><h3 id="æ éç¢è¾ å©" tabindex="-1"><a class="header-anchor" href="#æ éç¢è¾ å©"><span>æ éç¢è¾ å©</span></a></h3><ul><li>è§é人士导èª</li><li>æåæè¯»</li><li>åºæ¯æè¿°</li><li>éç¢ç©æé</li></ul><h2 id="æ§è½ææ " tabindex="-1"><a class="header-anchor" href="#æ§è½ææ "><span>æ§è½ææ </span></a></h2><table><thead><tr><th>ææ </th><th>æ°å¼</th></tr></thead><tbody><tr><td>è§è§å¤çå»¶è¿</td><td>< 2s</td></tr><tr><td>è¯é³è¯å«å»¶è¿</td><td>< 500ms</td></tr><tr><td>端å°ç«¯ååº</td><td>< 3s</td></tr><tr><td>çµæ± ç»èª</td><td>4-6 å°æ¶</td></tr><tr><td>å¾åå辨ç</td><td>1280x720</td></tr><tr><td>å¤ç帧ç</td><td>2 FPS</td></tr></tbody></table><h2 id="éç§ä¿æ¤-1" tabindex="-1"><a class="header-anchor" href="#éç§ä¿æ¤-1"><span>éç§ä¿æ¤</span></a></h2><h3 id="æ¬å°é¢å¤ç" tabindex="-1"><a class="header-anchor" href="#æ¬å°é¢å¤ç"><span>æ¬å°é¢å¤ç</span></a></h3><div class="language-python line-numbers-mode" data-highlighter="shiki" data-ext="python" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212;"><pre class="shiki shiki-themes vitesse-light vitesse-dark vp-code"><code class="language-python"><span class="line"><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676;">class</span><span style="--shiki-light:#2E8F82;--shiki-dark:#5DA994;"> PrivacyFilter</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">:</span></span> 132<span class="line"><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676;"> def</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665;"> filter_image</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">(</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">self</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">,</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> image</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">:</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> Image</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">)</span><span style="--shiki-light:#999999;--shiki-dark:#666666;"> -></span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> Image</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">:</span></span> 133<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD;"> # äººè¸æ¨¡ç³</span></span> 134<span class="line"><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> faces </span><span style="--shiki-light:#999999;--shiki-dark:#666666;">=</span><span style="--shiki-light:#A65E2B;--shiki-dark:#C99076;"> self</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">.</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">detect_faces</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">(</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">image</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">)</span></span> 135<span class="line"><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;"> for</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> face </span><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;">in</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> faces</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">:</span></span> 136<span class="line"><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> image </span><span style="--shiki-light:#999999;--shiki-dark:#666666;">=</span><span style="--shiki-light:#A65E2B;--shiki-dark:#C99076;"> self</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">.</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">blur_region</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">(</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">image</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">,</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> face</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">)</span></span> 137<span class="line"><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> </span></span> 138<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD;"> # ææä¿¡æ¯è¿æ»¤</span></span> 139<span class="line"><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> sensitive_regions </span><span style="--shiki-light:#999999;--shiki-dark:#666666;">=</span><span style="--shiki-light:#A65E2B;--shiki-dark:#C99076;"> self</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">.</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">detect_sensitive</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">(</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">image</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">)</span></span> 140<span class="line"><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;"> for</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> region </span><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;">in</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> sensitive_regions</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">:</span></span> 141<span class="line"><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> image </span><span style="--shiki-light:#999999;--shiki-dark:#666666;">=</span><span style="--shiki-light:#A65E2B;--shiki-dark:#C99076;"> self</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">.</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">mask_region</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">(</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">image</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">,</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> region</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">)</span></span> 142<span class="line"><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> </span></span> 143<span class="line"><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;"> return</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> image</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="æ°æ®å å¯" tabindex="-1"><a class="header-anchor" href="#æ°æ®å å¯"><span>æ°æ®å å¯</span></a></h3><div class="language-python line-numbers-mode" data-highlighter="shiki" data-ext="python" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212;"><pre class="shiki shiki-themes vitesse-light vitesse-dark vp-code"><code class="language-python"><span class="line"><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;">from</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> cryptography</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">.</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">fernet </span><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;">
143import</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> Fernet</span></span> 144<span class="line"></span> 145<span class="line"><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676;">class</span><span style="--shiki-light:#2E8F82;--shiki-dark:#5DA994;"> DataEncryption</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">:</span></span> 146<span class="line"><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676;"> def</span><span style="--shiki-light:#998418;--shiki-dark:#B8A965;"> __init__</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">(</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">self</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">):</span></span> 147<span class="line"><span style="--shiki-light:#A65E2B;--shiki-dark:#C99076;"> self</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">.</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">key </span><span style="--shiki-light:#999999;--shiki-dark:#666666;">=</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> Fernet</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">.</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">generate_key</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">()</span></span> 148<span class="line"><span style="--shiki-light:#A65E2B;--shiki-dark:#C99076;"> self</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">.</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">cipher </span><span style="--shiki-light:#999999;--shiki-dark:#666666;">=</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> Fernet</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">(</span><span style="--shiki-light:#A65E2B;--shiki-dark:#C99076;">self</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">.</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">key</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">)</span></span> 149<span class="line"><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> </span></span> 150<span class="line"><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676;"> def</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665;"> encrypt_image</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">(</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">self</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">,</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> image_bytes</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">:</span><span style="--shiki-light:#998418;--shiki-dark:#B8A965;"> bytes</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">)</span><span style="--shiki-light:#999999;--shiki-dark:#666666;"> -></span><span style="--shiki-light:#998418;--shiki-dark:#B8A965;"> bytes</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">:</span></span> 151<span class="line"><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;"> return</span><span style="--shiki-light:#A65E2B;--shiki-dark:#C99076;"> self</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">.</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">cipher</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">.</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">encrypt</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">(</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">image_bytes</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">)</span></span> 152<span class="line"><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> </span></span> 153<span class="line"><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676;"> def</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665;"> decrypt_image</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">(</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">self</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">,</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> encrypted</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">:</span><span style="--shiki-light:#998418;--shiki-dark:#B8A965;"> bytes</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">)</span><span style="--shiki-light:#999999;--shiki-dark:#666666;"> -></span><span style="--shiki-light:#998418;--shiki-dark:#B8A965;"> bytes</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">:</span></span> 154<span class="line"><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;"> return</span><span style="--shiki-light:#A65E2B;--shiki-dark:#C99076;"> self</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">.</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">cipher</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">.</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">decrypt</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">(</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">encrypted</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">)</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="éç§çº§å«é ç½®" tabindex="-1"><a class="header-anchor" href="#éç§çº§å«é ç½®"><span>éç§çº§å«é ç½®</span></a></h3><div class="language-yaml line-numbers-mode" data-highlighter="shiki" data-ext="yaml" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212;"><pre class="shiki shiki-themes vitesse-light vitesse-dark vp-code"><code class="language-yaml"><span class="line"><span style="--shiki-light:#998418;--shiki-dark:#B8A965;">privacy</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">:</span></span> 155<span class="line"><span style="--shiki-light:#998418;--shiki-dark:#B8A965;"> level</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">:</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;"> high</span><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD;"> # low, medium, high</span></span> 156<span class="line"><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> </span></span> 157<span class="line"><span style="--shiki-light:#998418;--shiki-dark:#B8A965;"> high</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">:</span></span> 158<span class="line"><span style="--shiki-light:#998418;--shiki-dark:#B8A965;"> blur_faces</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">:</span><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;"> true</span></span> 159<span class="line"><span style="--shiki-light:#998418;--shiki-dark:#B8A965;"> filter_license_plates</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">:</span><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;"> true</span></span> 160<span class="line"><span style="--shiki-light:#998418;--shiki-dark:#B8A965;"> filter_credit_cards</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">:</span><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;"> true</span></span> 161<span class="line"><span style="--shiki-light:#998418;--shiki-dark:#B8A965;"> local_processing_only</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">:</span><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;"> true</span></span> 162<span class="line"><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> </span></span> 163<span class="line"><span style="--shiki-light:#998418;--shiki-dark:#B8A965;"> medium</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">:</span></span> 164<span class="line"><span style="--shiki-light:#998418;--shiki-dark:#B8A965;"> blur_faces</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">:</span><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;"> true</span></span> 165<span class="line"><span style="--shiki-light:#998418;--shiki-dark:#B8A965;"> filter_license_plates</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">:</span><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;"> true</span></span> 166<span class="line"><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> </span></span> 167<span class="line"><span style="--shiki-light:#998418;--shiki-dark:#B8A965;"> low</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">:</span></span> 168<span class="line"><span style="--shiki-light:#998418;--shiki-dark:#B8A965;"> blur_faces</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">:</span><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;">
168 false</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2 id="å¼åæå" tabindex="-1"><a class="header-anchor" href="#å¼åæå"><span>å¼åæå</span></a></h2><h3 id="èªå®ä¹è§è§æ¨¡å" tabindex="-1"><a class="header-anchor" href="#èªå®ä¹è§è§æ¨¡å"><span>èªå®ä¹è§è§æ¨¡å</span></a></h3><div class="language-python line-numbers-mode" data-highlighter="shiki" data-ext="python" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212;"><pre class="shiki shiki-themes vitesse-light vitesse-dark vp-code"><code class="language-python"><span class="line"><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676;">class</span><span style="--shiki-light:#2E8F82;--shiki-dark:#5DA994;"> CustomVisionModel</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">:</span></span> 169<span class="line"><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676;"> def</span><span style="--shiki-light:#998418;--shiki-dark:#B8A965;"> __init__</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">(</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">self</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">,</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> model_path</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">:</span><span style="--shiki-light:#998418;--shiki-dark:#B8A965;"> str</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">):</span></span> 170<span class="line"><span style="--shiki-light:#A65E2B;--shiki-dark:#C99076;"> self</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">.</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">model </span><span style="--shiki-light:#999999;--shiki-dark:#666666;">=</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> load_model</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">(</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">model_path</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">)</span></span> 171<span class="line"><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> </span></span> 172<span class="line"><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676;"> async</span><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676;"> def</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665;"> analyze</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">(</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">self</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">,</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> image</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">:</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> Image</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">)</span><span style="--shiki-light:#999999;--shiki-dark:#666666;"> -></span><span style="--shiki-light:#998418;--shiki-dark:#B8A965;"> dict</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">:</span></span> 173<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD;"> # èªå®ä¹åæé»è¾</span></span> 174<span class="line"><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> result </span><span style="--shiki-light:#999999;--shiki-dark:#666666;">=</span><span style="--shiki-light:#A65E2B;--shiki-dark:#C99076;"> self</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">.</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">model</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">.</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">predict</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">(</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">image</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">)</span></span> 175<span class="line"><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;"> return</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> result</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="æ·»å æ°åè½" tabindex="-1"><a class="header-anchor" href="#æ·»å æ°åè½"><span>æ·»å æ°åè½</span></a></h3><div class="language-python line-numbers-mode" data-highlighter="shiki" data-ext="python" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212;"><pre class="shiki shiki-themes vitesse-light vitesse-dark vp-code"><code class="language-python"><span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD;"># æ³¨åæ°çè§è§å·¥å ·</span></span> 176<span class="line"><span style="--shiki-light:#999999;--shiki-dark:#666666;">@</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">vision_tool</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">(</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">"</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">identify_plant</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">"</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">)</span></span> 177<span class="line"><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676;">async</span><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676;"> def</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665;"> identify_plant</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">(</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">image</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">:</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> Image</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">)</span><span style="--shiki-light:#999999;--shiki-dark:#666666;"> -></span><span style="--shiki-light:#998418;--shiki-dark:#B8A965;"> str</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">:</span></span> 178<span class="line"><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> """</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">è¯å«æ¤ç©ç§ç±»</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">"""</span></span> 179<span class="line"><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> result </span><span style="--shiki-light:#999999;--shiki-dark:#666666;">=</span><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;"> await</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> plant_api</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">.</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">identify</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">(</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">image</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">)</span></span> 180<span class="line"><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;"> return</span><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676;"> f</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">"è¿æ¯ </span><span style="--shiki-light:#A65E2B;--shiki-dark:#C99076;">
180{</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">result</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">.</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">name</span><span style="--shiki-light:#A65E2B;--shiki-dark:#C99076;">}</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">ï¼</span><span style="--shiki-light:#A65E2B;--shiki-dark:#C99076;">{</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">result</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">.</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">description</span><span style="--shiki-light:#A65E2B;--shiki-dark:#C99076;">}</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">"</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2 id="ä¸å ¶ä»çæ¬å¯¹æ¯" tabindex="-1"><a class="header-anchor" href="#ä¸å ¶ä»çæ¬å¯¹æ¯"><span>ä¸å ¶ä»çæ¬å¯¹æ¯</span></a></h2><h3 id="vs-宿¹ç" tabindex="-1"><a class="header-anchor" href="#vs-宿¹ç"><span>vs 宿¹ç</span></a></h3><ul><li>宿¹çæ è§è§è½åï¼VisionClaw 䏿³¨è§è§</li><li>宿¹çææ¬è¾å ¥ï¼VisionClaw 夿¨¡æè¾å ¥</li><li>VisionClaw æ¯å®æ¹ççè§è§å¢å¼º</li></ul><h3 id="vs-moltis" tabindex="-1"><a class="header-anchor" href="#vs-moltis"><span>vs Moltis</span></a></h3><ul><li>Moltis 䏿³¨è¯é³ï¼VisionClaw 䏿³¨è§è§</li><li>两è 齿¯å¤æ¨¡ææ¹å</li><li>å¯ä»¥èåæå®æ´ç夿¨¡ææ¹æ¡</li></ul><h3 id="vs-mimiclaw" tabindex="-1"><a class="header-anchor" href="#vs-mimiclaw"><span>vs MimiClaw</span></a></h3><ul><li>MimiClaw è¿è¡å¨åçæºï¼VisionClaw è¿è¡å¨ææº</li><li>MimiClaw åèæä½ï¼VisionClaw åè½æ´å¼º</li><li>åºç¨åºæ¯å®å ¨ä¸å</li></ul><h2 id="ç¸å ³é¾æ¥" tabindex="-1"><a class="header-anchor" href="#ç¸å ³é¾æ¥"><span>ç¸å ³é¾æ¥</span></a></h2><ul><li><strong>GitHub</strong>: <a href="https://github.com/sseanliu/VisionClaw" target="_blank" rel="noopener noreferrer">sseanliu/VisionClaw</a></li><li><strong>Meta Ray-Ban</strong>: <a href="https://www.ray-ban.com/usa/discover-ray-ban-stories" target="_blank" rel="noopener noreferrer">ray-ban.com/stories</a></li><li><strong>ææ¡£</strong>: <a href="https://github.com/sseanliu/VisionClaw/wiki" target="_blank" rel="noopener noreferrer">ä½¿ç¨ææ¡£</a></li><li><strong>é®é¢åé¦</strong>: <a href="https://github.com/sseanliu/VisionClaw/issues" target="_blank" rel="noopener noreferrer">Issues</a></li></ul><h2 id="è´¡ç®" tabindex="-1"><a class="header-anchor" href="#è´¡ç®"><span>è´¡ç®</span></a></h2><p>欢è¿è®¡ç®æºè§è§å AR å¼åè è´¡ç®ï¼</p><div class="language-bash line-numbers-mode" data-highlighter="shiki" data-ext="bash" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212;"><pre class="shiki shiki-themes vitesse-light vitesse-dark vp-code"><code class="language-bash"><span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD;"># å éä»åº</span></span> 181<span class="line"><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">git</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;"> clone</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;"> https://github.com/sseanliu/VisionClaw.git</span></span> 182<span class="line"></span> 183<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD;"># å®è£ ä¾èµ</span></span> 184<span class="line"><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">pip</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;"> install</span><span style="--shiki-light:#A65E2B;--shiki-dark:#C99076;"> -r</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;"> requirements.txt</span></span> 185<span class="line"></span> 186<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD;"># è¿è¡æµè¯</span></span> 187<span class="line"><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">pytest</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;"> tests/</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2 id="许å¯è¯" tabindex="-1"><a class="header-anchor" href="#许å¯è¯"><span>许å¯è¯</span></a></h2><p>MIT License - è¯¦è§ <a href="https://github.com/sseanliu/VisionClaw/blob/main/LICENSE" target="_blank" rel="noopener noreferrer">LICENSE</a></p><hr><div style="text-align:center;padding:2rem 0;"><a href="https://github.com/sseanliu/VisionClaw" target="_blank" style="display:inline-block;padding:0.8rem 2rem;background:var(--vp-c-brand);color:white;border-radius:8px;text-decoration:none;font-weight:600;"> è®¿é® GitHub ä»åº â </a></div>`,75)])])}const p=i(h,[["render",e]]),d=JSON.parse('{"path":"/ecosystem/visionclaw/","title":"VisionClaw - æºè½ç¼éä¸å± | çæç³»ç»","lang":"zh-CN","frontmatter":{"title":"VisionClaw - æºè½ç¼éä¸å±","createTime":"2026/03/07 16:55:00","permalink":"/ecosystem/visionclaw/","de
187scription":"æºè½ç¼éä¸å± AI 婿 - 为 Meta Ray-Ban æºè½ç¼é设计ç夿¨¡æ Agent","head":[["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"VisionClaw - æºè½ç¼éä¸å±\\",\\"image\\":[\\"/lobster.svg\\"],\\"dateModified\\":null,\\"author\\":[{\\"@type\\":\\"Person\\",\\"name\\":\\"OpenClaw\\"}]}"],["meta",{"property":"og:url","content":"https://openclawgithub.cc/ecosystem/visionclaw/"}],["meta",{"property":"og:site_name","content":"OpenClaw 䏿æç¨"}],["meta",{"property":"og:title","content":"VisionClaw - æºè½ç¼éä¸å±"}],["meta",{"property":"og:description","content":"æºè½ç¼éä¸å± AI 婿 - 为 Meta Ray-Ban æºè½ç¼é设计ç夿¨¡æ Agent"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:image","content":"/lobster.svg"}],["meta",{"property":"og:locale","content":"zh-CN"}],["meta",{"name":"twitter:creator","content":"openclaw"}],["meta",{"name":"keywords","content":"visionclaw,æºè½ç¼é ai,夿¨¡æ agent,ar 婿"}]]},"readingTime":{"minutes":4.39,"words":1316},"git":{"createdTime":1788971858000},"filePathRelative":"ecosystem/visionclaw.md","headers":[]}');export{p as comp,d as data};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.