В процессе нашего автоматического тестирования мы неизбежно сталкиваемся с проверочными кодами при входе в систему. Часто мы можем только запросить у разработчиков универсальные проверочные коды или временно отключить функцию проверочного кода, но иногда мы должны спросить, может ли проверочный код генерироваться нормально, так что на данный момент все, что нам нужно сделать, это Введите код подтверждения, но код подтверждения генерируется случайным образом и не каждый раз один и тот же, поэтому нам все равно нужно его идентифицировать и ввести. У скрипта нет глаз, и его можно идентифицировать только по коду, поэтому в этой статье он будет представлен. Как использовать Python для простой идентификации числовых капч.
Распознавание кода проверки требует использования некоторых библиотек Python и программных сред. Их этапы установки описаны ниже.
Это механизм оптического распознавания символов с открытым исходным кодом.,Используется для текстового содержимого в Определить код подтверждения.,Способен распознавать текст на более чем 70 языках.,и предоставить разработчикам простые в использованииAPI。Скачать и установить можно по ссылке ниже.:https://github.com/tesseract-ocr/tesseract
。существоватьWindowsЕго можно скачать в системеexeфайл для установки。
Примечание:TesseractПосле завершения установки вам необходимоtesseract.exe
Добавьте путь к файлу в переменную системной среды.,В противном случае его нельзя будет вызвать в сценариях Python.
Необходимо использовать идентификацию кода подтверждения.PythonБиблиотека включает в себя:pillow(PIL)
、pytesseract
иopencv-python
。pillowдляPythonПоставляется со стандартной библиотекой,Другие библиотеки можно установить автоматически с помощью команды pip:
pip install pytesseract
pip install opencv-python
Во-первых, нам нужно подготовить несколько изображений проверочного кода. Вы можете найти изображения кода подтверждения в Интернете и загрузить их или использовать программу-сканер Python для сканирования кода подтверждения целевого веб-сайта. Здесь мы сначала вручную загружаем простое изображение цифрового кода проверки и сохраняем его как «test.jpg».
Мы можем использовать библиотеку Pillow (библиотека изображений Python) для загрузки изображения кода проверки. Библиотека Pillow может читать и обрабатывать различные категории форматов изображений, таких как jpg, png, bmp и т. д. Код выглядит следующим образом:
from PIL import Image
img = Image.open('test.jpg')
img.show()
использоватьpytesseract
Библиотека,Мы легко можем определить цифры на картинке.。pytesseract
Библиотеказависит отTesseract Механизм OCR может обрабатывать проверочные коды различной сложности, такие как цифры, буквы, китайские иероглифы, наклон, деформация и т. д. Код выглядит следующим образом:
import pytesseract
text = pytesseract.image_to_string(Image.open('test.jpg'), lang='eng')
print(text)
этот абзацкодзначит использоватьpytesseract
Библиотека Преобразование строк в изображениядляхарактер。lang
Параметры могут указывать тип распознаваемого языка.,здесь мыиспользовать Понятноeng
,Указывает английский. Если код подтверждения состоит из китайских иероглифов,настраиватьдляchi_sim
Вот и все。
Если код проверки содержит как цифры, так и буквы, необходимо изменить метод распознавания. Ниже представлен простой метод обработки, который заключается в увеличении скорости распознавания за счет обработки бинаризации и шумоподавления.
Бинаризация
Бинаризация – это преобразование всех пикселей изображения в черно-белое. Для изображений кода проверки,Мы можем преобразовать его в черно-белое изображение в оттенках серого.,Для облегчения последующей обработки. код следующий:
import cv2
img = cv2.imread('test.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
retval, threshold = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
cv2.imshow('Image', threshold)
cv2.waitKey(0)
cv2.destroyAllWindows()
В этом абзаце используется библиотека OpenCV для считывания изображения в изображение в оттенках серого.,И провести Бинаризацию. в,127 это порог,Чем меньше значение,Чем больше черных деталей,Белой части меньше. После запуска вы можете получить бинаризированное изображение.
Обработка шумоподавления
После бинаризации,На изображении все еще присутствует шум и отвлекающие линии. Если с этими шумами не бороться,Повлияет на последующее распознавание символов,Поэтому необходимо провести Обработку шумоподавления.,Удалите шум и отвлекающие линии с изображений. код следующий:
import cv2
img = cv2.imread('test.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
retval, threshold = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
blur = cv2.GaussianBlur(threshold,(5,5),0)
cv2.imshow('Image', blur)
cv2.waitKey(0)
cv2.destroyAllWindows()
Этот код использует функцию фильтра Гаусса для сглаживания изображения и устранения шума и мешающих линий. Среди них (5,5) указывает размер ядра. Чем больше значение, тем очевиднее эффект сглаживания. После запуска вы сможете получить обработанную картинку.
Определить код подтверждения
Для кодов проверки, содержащих смесь цифр и букв, нам необходимо идентифицировать каждый символ. Метод сегментации символов можно использовать для сегментации изображения кода проверки на односимвольное изображение, а затем выполнения распознавания символов. Код выглядит следующим образом:
import pytesseract
import cv2
img = cv2.imread('test.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
retval, threshold = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
blur = cv2.GaussianBlur(threshold, (5,5), 0)
contours, hierarchy = cv2.findContours(blur, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
count = 0
for contour in contours:
(x,y,w,h) = cv2.boundingRect(contour)
if w > 10 and h > 10:
roi = blur[y:y+h, x:x+w]
cv2.imwrite(str(count)+'.jpg', roi)
text = pytesseract.image_to_string(roi, lang='eng')
print(text)
count += 1
cv2.imshow('Image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
В этом абзаце сначала происходит бинаризация изображения и Обработка. шумоподавления,ОднаконазадиспользоватьfindContours
Функция находит и сегментирует контур края каждого символа.。СноваиспользоватьboundingRect
函数得到每个характер的位置иразмер,ииспользоватьimage_to_string
Функция выполняет распознавание символов для каждого символа。бегатькодназад,Вы можете видеть, что результатом вывода является каждый сегментированный символ и результат его распознавания.
В этой статье объясняется, как использовать Python и связанные библиотеки для распознавания числовых кодов проверки. С помощью этого метода мы можем реализовать автоматическое распознавание кодов проверки и использовать их для автоматического тестирования, сканирования или других сценариев, требующих обработки кода проверки. В практических приложениях метод распознавания может быть дополнительно оптимизирован и скорректирован в соответствии с конкретными потребностями для получения лучших результатов распознавания.