import requests
import base64
import os
import json
def create_task(api_url, project_id, image_path, api_key):
try:
with open(image_path, "rb") as image_file:
encoded_image = base64.b64encode(image_file.read()).decode('utf-8')
image_data = f"data:image/jpeg;base64,{encoded_image}"
task_spec = [
{
"image_with_animal": image_data
}
]
payload = {
"project_id": project_id,
"task_spec": task_spec # Массив с одним объектом внутри
}
headers = {
"Content-Type": "application/json",
"Authorization": f"{api_key}"
}
print("Отправляемые данные:", json.dumps(payload, indent=4)) # Логирование данных перед отправкой
response = requests.post(api_url + "/tasks", json=payload, headers=headers)
if response.status_code == 201:
print(f"Задача успешно создана для файла {image_path}")
return True
else:
print(f"Ошибка при создании задачи для файла {image_path}: {response.status_code}, {response.text}")
return False
except Exception as e:
print(f"Произошла ошибка при создании задачи для файла {image_path}: {str(e)}")
return False
def validate_project_id(api_url, project_id, api_key):
headers = {
"Authorization": f"{api_key}"
}
response = requests.get(f"{api_url}/projects/{project_id}", headers=headers)
return response.status_code == 200
def process_images(api_url, project_id, images_dir, api_key):
try:
if not validate_project_id(api_url, project_id, api_key):
print(f"Неправильный `project_id`: {project_id}")
return
sent_images = set()
# Файл для хранения отправленных изображений
history_file = "sent_images.json"
# Загрузка истории отправленных изображений, если файл существует
if os.path.exists(history_file):
with open(history_file, "r") as file:
sent_images = set(json.load(file))
# Проход по всем файлам в директории
for filename in os.listdir(images_dir):
image_path = os.path.join(images_dir, filename)
# Проверяем, является ли файл изображением и не был ли он отправлен ранее
if os.path.isfile(image_path) and filename.lower().endswith(('.png', '.jpg', '.jpeg')) and filename not in sent_images:
print(f"Обработка файла: {image_path}")
if create_task(api_url, project_id, image_path, api_key):
sent_images.add(filename)
# Обновление истории отправленных изображений
with open(history_file, "w") as file:
json.dump(list(sent_images), file)
print("Процесс завершен успешно.")
except Exception as e:
print(f"Произошла ошибка при обработке изображений: {str(e)}")
# Пример использования функции
if __name__ == "__main__":
api_url = "http://dataapi.2captcha.com" # Обновленный URL API для создания задач
project_id = 64 # Замените на ваш ID проекта
images_dir = "C:/images" # Укажите директорию с изображениями
api_key = "Ваш Ключ АПИ" # Замените на ваш API ключ
# Проверка наличия изображений в директории
if not os.path.isdir(images_dir):
print(f"Директория {images_dir} не существует")
else:
image_files = [f for f in os.listdir(images_dir) if f.lower().endswith(('.png', '.jpg', '.jpeg'))]
if not image_files:
print(f"В директории {images_dir} нет изображений для обработки")
else:
print(f"Найдено {len(image_files)} изображений для обработки")
process_images(api_url, project_id, images_dir, api_key)