Сканирование текста с картинки.

This commit is contained in:
Mootfrost777 2022-08-25 23:20:35 +03:00
parent 03121e4fb1
commit d9ff5ab687
4 changed files with 43 additions and 20 deletions

View file

@ -2,7 +2,8 @@ from google.cloud import dialogflow_v2beta1 as dialogflow
from dotenv import load_dotenv from dotenv import load_dotenv
load_dotenv('.env')
load_dotenv()
async def detect_intent_text(project_id, session_id, text, language_code): async def detect_intent_text(project_id, session_id, text, language_code):
@ -16,5 +17,5 @@ async def detect_intent_text(project_id, session_id, text, language_code):
if response.query_result.intent.is_fallback: if response.query_result.intent.is_fallback:
return None return None
else:
return response.query_result.fulfillment_text return response.query_result.fulfillment_text

View file

@ -12,7 +12,6 @@ services:
- SESSION_NAME=NoVagonBot - SESSION_NAME=NoVagonBot
- GOOGLE_PROJECT_ID=novagon-rg9f - GOOGLE_PROJECT_ID=novagon-rg9f
- GOOGLE_APPLICATION_CREDENTIALS=df_key.json - GOOGLE_APPLICATION_CREDENTIALS=df_key.json
- GOOGLE_MODEL_LANGUAGE=ru
- POSTGRES_HOST=${POSTGRES_HOST} - POSTGRES_HOST=${POSTGRES_HOST}
- POSTGRES_DATABASE=postgres - POSTGRES_DATABASE=postgres
- POSTGRES_USER=${POSTGRES_USER} - POSTGRES_USER=${POSTGRES_USER}

51
main.py
View file

@ -1,9 +1,13 @@
from telethon import TelegramClient, events from telethon import TelegramClient, events
from telethon import types from telethon import types
from datetime import timedelta from datetime import timedelta
from PIL import Image
import io
import pytesseract
from db import DBAction, db_action, create_table from db import DBAction, db_action, create_table
import aiosqlite
from df_utils import detect_intent_text from df_utils import detect_intent_text
@ -15,6 +19,8 @@ from dotenv import load_dotenv
load_dotenv() load_dotenv()
languages = ['rus', 'eng']
bot = TelegramClient(os.environ['SESSION_NAME'], int(os.environ['API_ID']), bot = TelegramClient(os.environ['SESSION_NAME'], int(os.environ['API_ID']),
os.environ['API_HASH']).start(bot_token=os.environ['BOT_TOKEN']) os.environ['API_HASH']).start(bot_token=os.environ['BOT_TOKEN'])
@ -176,35 +182,50 @@ async def manage_stickerpack(msg):
raise events.StopPropagation raise events.StopPropagation
@bot.on(events.NewMessage()) async def on_mute(msg):
async def process_message(msg):
"""if await check_admin(msg) or await check_user_in_exceptions(msg.sender_id, msg.chat_id):
return"""
if msg.text:
resp = await detect_intent_text(os.environ['GOOGLE_PROJECT_ID'], msg.chat_id, msg.raw_text,
os.environ['GOOGLE_MODEL_LANGUAGE'])
if resp:
await msg.reply(random.choice(['Харе уже свои вагоны слать',
'Вагончиками балуемся?',
'Вагоны тут не приветствуются',
'Надоел уже со своими вагонами']))
if random.randint(0, 6) == 1: if random.randint(0, 6) == 1:
await msg.respond( await msg.respond(
'Бот работает в режиме обучения, напишите /report в ответ на сообщение, если оно не было распознано или распознано по ошибке') 'Бот работает в режиме обучения, напишите /report в ответ на сообщение, если оно не было распознано или распознано по ошибке')
await bot.edit_permissions(msg.chat_id, msg.sender_id, timedelta(minutes=10), send_messages=False) await bot.edit_permissions(msg.chat_id, msg.sender_id, timedelta(minutes=10), send_messages=False)
@bot.on(events.NewMessage())
async def process_message(msg):
"""if await check_admin(msg) or await check_user_in_exceptions(msg.sender_id, msg.chat_id):
raise events.StopPropagation"""
if msg.text:
for lang in languages:
resp = await detect_intent_text(os.environ['GOOGLE_PROJECT_ID'], msg.chat_id, msg.text, lang)
if resp:
await msg.reply(random.choice(['Харе уже свои вагоны слать',
'Вагончиками балуемся?',
'Вагоны тут не приветствуются',
'Надоел уже со своими вагонами']))
await on_mute(msg)
raise events.StopPropagation raise events.StopPropagation
if msg.sticker: if msg.sticker:
banstickerpacks = [stickerpack[0] for stickerpack in await db_action('SELECT pack_id FROM banned_stickerpacks WHERE chat_id = ?', banstickerpacks = [stickerpack[0] for stickerpack in await db_action('SELECT pack_id FROM banned_stickerpacks WHERE chat_id = ?',
(msg.chat_id,), DBAction.fetchall)] (msg.chat_id,), DBAction.fetchall)]
if any([x.stickerset.id in banstickerpacks for x in msg.sticker.attributes if isinstance(x, types.DocumentAttributeSticker)]): if any([x.stickerset.id in banstickerpacks for x in msg.sticker.attributes if isinstance(x, types.DocumentAttributeSticker)]):
await bot.edit_permissions(msg.chat_id, msg.sender_id, timedelta(minutes=10), send_messages=False)
await msg.reply(random.choice(['Ай-ай-ай, стикеры с вагончиками, не хорошо', await msg.reply(random.choice(['Ай-ай-ай, стикеры с вагончиками, не хорошо',
'Стикерами с вагонами балуемся? Негоже так делать', 'Стикерами с вагонами балуемся? Негоже так делать',
'Надоел уже со своими вагонами', 'Надоел уже со своими вагонами',
'Щас высажу с поезда, будете тут про номерные свои кричать!'])) 'Щас высажу с поезда, будете тут про номерные свои кричать!']))
await on_mute(msg)
raise events.StopPropagation
if msg.photo:
for lang in languages:
image_text = pytesseract.image_to_string(Image.open(io.BytesIO(await bot.download_media(msg.photo, file=bytes))), lang=lang)
resp = await detect_intent_text(os.environ['GOOGLE_PROJECT_ID'], msg.chat_id, image_text, lang)
if resp:
await msg.reply(random.choice(['Картинки с текстом про вагончики тоже нельзя 🙃',
'Мемами с вагонами балуемся? Не надо так делать',
'Вагоны нельзя ни в каком виде, даже в в мемах']))
await on_mute(msg)
raise events.StopPropagation
async def main(): async def main():

View file

@ -2,3 +2,5 @@ telethon
aiosqlite aiosqlite
google-cloud-dialogflow google-cloud-dialogflow
python-dotenv python-dotenv
pytesseract
Pillow