1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

N予備校をgpt君にやってもらいたかった

Last updated at Posted at 2023-03-28

N予備校をgpt君にやってもらいたかった

初投稿なので読みずらいところがあるかもです。
皆さんめんどくさいオンラインな課題ありますよね
そのような課題はgpt君やらせましょう!!!

なので課題というほど大層なものではないのですがN予備校というものを自動攻略したいと思います。

環境はm2のpython3.10です。
使用したライブラリなどは

Name Version
Pyocr 0.8.3
Pillow 9.4.0
Openai 0.27.2

そしてコードです。

main.py
from PIL import Image
from PIL import ImageGrab
import sys
import pyocr
import pyocr.builders
import gpt3
screenshot = ImageGrab.grab(bbox=(1370, 220, 2550, 700))
screenshot.save('SC.png')
tools = pyocr.get_available_tools()
if len(tools) == 0:
    print("No OCR tool found")
    sys.exit(1)
tool = tools[0]
print("Will use tool '%s'" % (tool.get_name()))

txt = tool.image_to_string(
    Image.open('SC.png'),
    lang='jpn',
    builder=pyocr.builders.TextBuilder()
)
print(txt)
print("")
print("ここから下はgptくんの回答です--------------")
print (gpt3.gpt3Q(txt))

このmain.pyがやってる事は、画面のスクショを撮ってOCRで画像に含まれる文字を起こして
起こした文字をgpt君に投げるだけです。

唐突に出てきたgpt3ライブラリ(自作)のソースは

gpt3.py
import openai
import os

# APIキーを設定
apikey="API_KEY"
openai.api_key = apikey
# GPT-3を呼び出す
def gpt3Q(q):
    response = openai.Completion.create(
        engine="davinci",
        prompt=q,
        temperature=0.5,
        max_tokens=10
    )
    return response.choices[0].text

ほぼ全部gpt書いてもらいましたが、大体動かないです。
でもgpt君にエラー内容を投げたらほぼ解決してくれますsitumon.001.jpeg
たまに無理な時もあります

実行してみよう

situmon.001.jpeg

_人人人人人人人人人_
> 存在しない回答 <
 ̄Y^Y^Y^Y^Y^Y^Y^Y ̄

を出して来ます。

なぜこうなってしまったのか

理由として考えられるのは
1. gpt君には問題が難しい説
2. gpt君には問題の回答はこれしかなかった説
3. gpt君には問題の答え方が定義されていなかったから出来なかった説

が考えられました。一番解決に近そうなのは3の答え方を教えてあげるのが良さそうです。
なのでocrした文を送る前に"答え方.txt"的なのを送ってあげましょう。
やる気になったら"答え方.txt"を書きます

いやうちの学校の課題N予備校じゃないんだが

って感じの人も多いと思います。
その場合は
screenshot = ImageGrab.grab(bbox=(X, Y, X, Y))

この項目のX,YでOCR用のスクショ範囲を指定しているのでその範囲さえ弄ればいいと思います
XY座標はpynputとpyautoguiを使ったこちらを使えば良いですよ。
左クリックした座標をprintしてくれます、止めたい時はCTRL+Cで止まります。

clicktoXY.py
from pynput import mouse
import pyautogui
def on_click(x, y, button, pressed):
    if pressed:
        print(pyautogui.position())
        return True
with mouse.Listener(
        on_click=on_click) as listener:
    listener.join()

もし間違っていたりしたらコメントなどで教えて頂ければ嬉しいです。

参考にさせていただいた記事

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?