![見出し画像](https://assets.st-note.com/production/uploads/images/144529047/rectangle_large_type_2_0602dc5b8db6293b196257558783b601.png?width=800)
音声からプログラムを自動的に作るautocodeを作った
なんか吾輩の昔のブログを読みたいという酔狂な奴がいて、何でも最近会社を立ち上げたらしくて売上が1億を超えたところらしい。
他ならぬ友が会社を立ち上げて苦労している時に、吾輩の昔のブログのタイトルだけ覚えていて、それが見たいのだという。
吾輩は主にAI学習用に自分のブログのアーカイブを持っている。
持っているのだがHTML形式のため非常に読みにくい。
そこでHTMLタグ除去コードを書こうと思ったのだが、今からそんなもの書くのは芸がないので、まず音声入力を受け取って、それを音声認識した結果をClaude-3に投げてプログラムとして出力するプログラムを書いてみた。
これのミソは、喋るだけでコードが出来上がることである。
実際に使うとこうなる。
python autocode.py
Recording...
Recording finished.
Special tokens have been added in the vocabulary, make sure the associated word embeddings are fine-tuned or trained.
Due to a bug fix in https://github.com/huggingface/transformers/pull/28687 transcription using a multilingual Whisper will default to language detection followed by transcription instead of translation to English.This might be a breaking change for your use case. If you want to instead always translate your audio to English, make sure to pass `language='en'`.
Recognized prompt: インターネットで上級機関車の写真を検索して表示。
Generated code:
はい、以下のPythonコードでインターネットから上級機関車の写真を検索して表示できます。
```python
import requests
from bs4 import BeautifulSoup
url = 'https://www.google.com/search?q=high+speed+train&source=lnms&tbm=isch'
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
images = soup.find_all('img')
for image in images:
src = image['src']
if 'http' in src:
print(src)
image_response = requests.get(src)
with open('high_speed_train.jpg', 'wb') as f:
f.write(image_response.content)
from PIL import Image
img = Image.open('high_speed_train.jpg')
img.show()
```
このコードは次のことを行います:
1. インターネットで「high speed train」という検索クエリを使って画像検索を行う
2. 検索結果ページのHTMLを解析するためにBeautiful Soupを使う
3. HTMLからすべての<img>タグを取得する
4. src属性を持つ最初の画像のURLを取得する
5. そのURLから画像データを取得する
6. 画像データをlocalファイル'high_speed_train.jpg'に保存する
7. PIL/Pillowライブラリを使ってその画像を表示する
これでインターネットから上級機関車の写真を検索して表示するPythonプログラムが完成しました!
import requests
from bs4 import BeautifulSoup
url = 'https://www.google.com/search?q=high+speed+train&source=lnms&tbm=isch'
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
images = soup.find_all('img')
for image in images:
src = image['src']
if 'http' in src:
print(src)
image_response = requests.get(src)
with open('high_speed_train.jpg', 'wb') as f:
f.write(image_response.content)
from PIL import Image
img = Image.open('high_speed_train.jpg')
img.show()
Code saved to generated_code.py
shi3z@shi3zettonoMacBook-Pro ~/p/autocode> python generated_code.py
https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTvd0GiENzdTzOx2w_NC5J48A_w0PV0RuVk_GnpZxIMiiUTvTMRdPtzLYCDuDg&s
https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTdLmco6gn9ccngImzrWcZdun6mk3CnupqUqVxo0VL93oWNaKOYUTzdpohXyI8&s
https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTnIu6IihWMrpEWFacIbtwnEmWiDxqWBE8kmTMT2va_G9RVZg-lZSRTiLJssw&s
https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQPP6t1vHVj7MZ4scr9j54Lyox-MeeWr9ESr4rsI5xk0ZM212NSo-gRztXQqZQ&s
https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSGDpnfA8OkHY0QC_zyt0aZXbxnYnQJ2K2-XdjhwjJQDkVmG3mXH6f28YQNAg&s
https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcT4iDf17p1LJvcgEW56RIL0JU4SUbhYDsmjqIz5wrDZnec9FCud5JyQU8QsBbo&s
https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSVTM_fypxT0yi4K6aLG8jKo6kZ4J223kTmJFrzIRLL-rncddZ1-3GoyjJwqus&s
https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRvsgOcdFxDxcsfR4RihbI-vTJA4wnXEPldpGt9qNhGp0YMr5He3TfbxJnmew&s
https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcScZOK6KQw0HRMjAzM0_-qZ1lo2vIHl1v7On-FqiKILntYXabGpuTLaN9d-bQ&s
https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRbDTMnkDJ1rVNwCOExLfLT2qHwVmcpuhHNPb87a7vfpNF9BiRNFsEukO9Wjgo&s
https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTt86AuP_XU7yTqsJc8CEQ7xJm34eT5hAv05mLColC3JmInhcxilXoefUl8XCA&s
https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQE1ZucXSGgbBZhx0vWrTdRGO-PpJElNB_VvWCiG_iIdnNAO4ctuDl23WuHSg&s
https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRByYXQ8tpkBn-LEMh6xxd7AAsaoX3A1IWXxAckQtcIbO0UsqyADD2Aki1unQ&s
https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRGzPSSJ1Vej0zDEJF-sc6f08IkI-5R8vB1BlPabuzFxe09deNPkNcqb78BRXg&s
https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQmmIwI_Ta4tv5HbITvWdvY_wHfNBiHHtAHbY5gFYS1KyuJ2Rf8iLJnKEOr_A&s
https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcR5dkvWrKjdRSUlWHQw_qkREn3iPB68Y0hjKpXfs4t4IpkLqq2L4vUUrPUcqQ&s
https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcScwPMOI41EJdZucWMBNIXDMQZr-4CW_KJ0SS9NmA12Fsym1W6_9yOcKiuDCw&s
https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQgiNwUmqO4YLgVo45NFgfXfQZHE98SAOsHANGTwkQEGveeXKqZBov41mHhcg&s
https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRPCsLM-NrHJIMVvOWMRfdYPqGJj3rhaQ-F-a-Vgrs-xCNOCS4DRwEjp5sxpQ&s
https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSG5JnTfEtM_DSesOGLm24luhbB1AWs0IrTjXfZsc4VLPDbd2uHdGZ_FMPdiQ&s
![](https://assets.st-note.com/img/1718756018459-GGa1OKLuFt.png?width=800)
実行後、「Recording…」と表示されたところで「インターネットから蒸気機関車の画像を検索して表示」とだけ指示している
要はOpenInterpreterと同じようなものなのだが、起点が音声というだけでだいぶ違った体験になる。
Whisperを使っているので、Whisperが対応している音声言語なら英語、日本語以外にも対応できる。
やはりプログラムを書かせるとなるとclaude-3が良さそうな気がする。好みの問題かもしれないが。