Прогресс дошел даже до такой, чисто человеческой области обслуживания, как гадание на картах. С помощью великого и могучего GPT, используя Raspberry pico и w5100S, можно гадать с виртуальными картами Таро и получать текстовый ответ! Все что нужно для проекта, это W5100S, поддерживающий Ethernet-связь с Raspberry pico.

Настройка такая же, как на изображении выше.
Ethernet-соединение
Первое, что нужно сделать, это подключить Ethernet. Можете легко подключить плату Pico к Ethernet, войдя в Git.


Далее настроить компьютер как сервер, а Pico как клиент.


Передача изображения и отображение на экране:
while True:
with open(“back1234.bmp”, “rb”) as f:
image_data = f.read()
print(image_data)len_sent = f”LEN:{len(image_data)}”.encode()
print(f”length of sent data = {len_sent}”)
connectionSock.send(len_sent)
time.sleep(1)
connectionSock.send(image_data)
time.sleep(1)
Передайте изображение BMP, которое уже было создано через Ethernet. (Сервер)
while True:
data = s.recv(MAXBUF)
if not data:
continueif len(data):
print(len(data))
if not len_buf:
if b”LEN” in data:
len_buf = int(data.decode().split(“:”)[1])
print(f”length of buf = {len_buf}”)
else:
buf += data
if len(buf) >= len_buf:
breakbmp_data = bytearray(buf)
with open(“test.bmp”, “wb”) as f:
f.write(bmp_data)
f.close()group = displayio.Group()
display.show(group)bitmap = displayio.OnDiskBitmap(“/test.bmp”)
tile_grid = displayio.TileGrid(bitmap, pixel_shader=bitmap.pixel_shader)
group.append(tile_grid)os.remove(“/test.bmp”)
Клиент подключается к серверу, получает изображение и отображает его.
Выбор карт
Можно выбрать нужную карту с помощью четырех кнопок.
while True:
pressed = button1.value + button2.value * 2 + button3.value * 2 ** 2 + button4.value * 2 ** 3if pressed != 15:
breaks.send(f”{15 – pressed}”.encode())
В клиенте нажмите кнопку нужного номера карты. Он вычисляет бит за битом и отправляет данные на сервер. Когда нажимаете кнопку 1, номера 1 и 2 отправляют 2, номер 3 отправляют 4, номер 4 отправляют 8.
while True:
data = connectionSock.recv(2)
if not data:
continue
data = data.decode()
card_num: str = ”
print(f”received={data}”)
if data == ‘1’:
card_num = ‘first’
elif data == ‘2’:
card_num = ‘second’
elif data == ‘4’:
card_num = ‘third’
elif data == ‘8’:
card_num = ‘fourth’query = “4 random cards flipped on pamela colman smith rws tarot deck.” \
“I picked the {} card. Please explain what this card is like. Please explain within 3 sentences”.format(card_num)
print(query)
Когда сервер получает данные, он преобразует данные в нужные символы. И создайте строку для доставки на GPT.
Теги GPT в чате
Можно получить ключ API GPT для чата на указанном сайте: platform.openai.com/overview
def Chat_GPT(api_key, query):
global answeropenai.api_key = api_key
model = “gpt-3.5-turbo”
messages = [
{
“role”: “system”,
“content”: “You are the best tarotist.”
},
{
“role”: “user”,
“content”: query
}
]response = openai.ChatCompletion.create(
model=model,
messages=messages
)
answer = response[‘choices’][0][‘message’][‘content’]
print(answer)
Назначим следующую роль для Chat GPT и посмотрим соответствующую подсказку.
query = “4 random cards flipped on pamela colman smith rws tarot deck.” \
“I picked the {} card. Please explain what this card is like. Please explain within 3 sentences”.format(card_num)
print(query)
Chat_GPT(api_key, query)
Затем основной код объединяет информацию о нажатии кнопки, полученную от устройства, в подсказку и перенаправляет ее на GPT.


DALL-E 2 — это инструмент для создания изображений, созданный OpenAI.
def dall_e2(answer):
global image_url
global image_data
response = openai.Image.create(
prompt=answer,
n=1,
size=”256×256″,
)
image_url = response[‘data’][0][‘url’]
urllib.request.urlretrieve(image_url, “test.bmp”)im = Image.open(“test.bmp”)
im_resized = im.resize((220, 220))im_resized = im_resized.convert(‘P’, palette=Image.ADAPTIVE, colors=16)
im_resized.save(“test_resized.bmp”, format=”BMP”)
with open(“test_resized.bmp”, “rb”) as f:
image_data = f.read()
print(image_data)
Код для DALL-E 2 устроен следующим образом. Здесь следует отметить раздел «Размер изображения». Поскольку тут нет отдельной памяти, сохраним картинку в формате BMP во флэш-память платы Pico и покажем её позже.
В любом случае при отправке и получении данных размер изображения не может быть больше размера SRAM, поскольку данные хранятся в SRAM.
На практике программа не работала должным образом, когда размер изображения превышал 50 кБ.
Chat_GPT(api_key, query)
dall_e2(answer)
В основном коде отправляем полученные от GPT данные обратно в DALL-E 2 следующим образом.
Dall-E2 создает образ из приглашения, отправленного GPT.
Отображение
Отправьте данные клиенту, как это делали в предыдущем процессе, чтобы отобразить изображение, созданное Dall-E2.


Описание карты:
# Card Description
s.send(f”Card Description”.encode())
После отображения картинки отправьте на сервер строку Описание карты.
done = False
sent = False
while True:
data = connectionSock.recv(100)
if not data:
continue
print(f”received={data}”)
# if client sent OK all is done
if data == b”OK”:
done = True
if not sent:
ret = connectionSock.send(answer.encode())
sent = True
# quit when client received my response
if done:
connectionSock.close()
break
while True:
data = connectionSock.recv(100)
if not data:
continue
print(f”received={data}”)
# if client sent OK all is done
if data == b”Reset”:
done = True
break
Когда сервер получает сообщение «Описание карты», он снова отправляет клиенту описание карты, полученное через Chat GPT. Клиент отобразит описание карты.


Ну вот и всё, теперь вы можете использовать эту электронную версию карт Таро, чтобы предсказать удачу. Надеемся искусственный интеллект справится с этим получше сомнительных гадалок!






