Переводчик с китайского на русский по фото с помощью камеры
Китай — популярное туристическое направление; Богатство памятников и экскурсионных маршрутов, древняя история страны и ее богатое культурное наследие делают Китай особенно привлекательным для туристов. Но как посетить всех этих красот и решить такие простые задачи, как найти дорогу, заселиться в отель или заказать еду в ресторане, если вы не знаете языка? Китайский — один из самых сложных языков в мире, с уникальным алфавитом, и выучить его на базовом уровне всего за несколько недель, как в случае с европейскими языками, — непростая задача. Существуют словарные приложения, которые помогут вам перевести с китайского на русский язык с помощью камеры.
Содержание
- Как перевести китайские иероглифы
- Яндекс Переводчик с картинок в помощь
- Перевод в Free Online OCR
- Как перевести китайский текст с картинки другими способами?
- Заключение
Как перевести китайские иероглифы
Технологии не стоят на месте, и путешественникам больше не нужно возиться с карманным переводчиком, который только смущает его владельца и его спутников.
Эта функция новая, поэтому она нестабильна и требует определенных навыков. Чтобы текст был разборчивым, сделайте качественную фотографию, на которой желаемые символы хорошо видны. Чем четче и ярче изображение, тем больше вероятность, что текст будет переведен максимально приближенным к своему смыслу.
Пожалуйста, обратите внимание! Большинство шрифтов не могут быть прочитаны приложениями для перевода, особенно если символы написаны нечетко.
Яндекс Переводчик с картинок в помощь
Несмотря на то, что Google Translate традиционно более популярен, Яндекс Переводчик обрабатывает китайский (и некоторые европейские языки) более корректно и грамотно, чем его более известный коллега.
Перевод с фото с помощью Яндекса можно сделать только с телефона, для компьютеров такая функция пока недоступна. Сначала вам нужно выбрать язык, с которым вы работаете, в данном случае китайский. Для получения результата достаточно просто сделать фото или выбрать нужное изображение в памяти смартфона, предварительно нажав на значок «Фото» в сервисе. Яндекс попросит вас выбрать область, с которой вы хотите работать. После выполнения этих шагов нажмите Enter и дождитесь завершения процесса.
Перевод в Free Online OCR
Free Online OCR, как известно, является одной из первых служб перевода, которая переводит с фотографий. Сайт относительно новый, поэтому корректность результатов для некоторых языков заметно хуже. Также пока нет полной русской версии, но она доступна на английском языке.
Важное примечание: качество и достоверность перевода во многом зависит от качества фотографии и объема текста. Чем меньше слов и чем выше качество изображения, тем лучше программа сможет распознать информацию.
Чтобы перевести текст с изображения с китайского на русский, выполните следующие действия:
- Загрузите изображение со своего компьютера, щелкнув значок «Выбрать файл». Сайт позволяет отправлять несколько фотографий одновременно;
- В нижней строке сайта выберите язык, с которого хотите перевести;
- Выполните предыдущие шаги и щелкните значок «Загрузить + OCR»;
- После завершения процесса веб-сайт предлагает возможность просмотреть как исходный текст, так и готовый перевод. Исходный текст позволяет пользователю увидеть, как приложение «видит» шрифт, сравнить его с изображением и понять, где работа выполняется неправильно (изображение и исходный текст не будут перекрываться в этих точках). Распознавание шрифтов пока оставляет желать лучшего.
Как перевести китайский текст с картинки другими способами?
Помимо Яндекс Переводчика и Free Online OCR (которых может не быть под рукой), существует множество сервисов, выполняющих аналогичные задачи. Некоторые из них доступны только на смартфонах и компьютерах, другие работают на всех устройствах.
Для перевода изображения на русский язык можно использовать:
- Google Translate, который работает так же, как Яндекс Переводчик. Google повторно выпустил свое приложение специально для китайских пользователей с одобрения правительства. Некоторое время назад в Китае нельзя было использовать ни одну из платформ Google, запрещенных китайским правительством;
- Программное обеспечение для распознавания текста и последующий перевод. Этот метод требует больше времени, чем предыдущий, но, возможно, более надежен. Выполняется в два этапа. Используя оптическое распознавание символов (его можно бесплатно скачать в любом магазине), исходный текст извлекается из фотографии и затем передается в любой популярный сервис перевода.
Заключение
На данный момент услуги по переводу фотографий не очень надежны: есть проблемы с качеством фотографий, высокие требования к фотографиям, а неправильный перевод — серьезная проблема. Но такие услуги уже пользуются постоянным спросом и пригодятся многим путешественникам. Программы (для перевода с китайского с фото) только набирают обороты. Но уже сейчас можно с уверенностью сказать, что через несколько лет они будут систематически набирать популярность.
5 сайтов для распознавания китайских иероглифов по рисунку с помощью мыши
Научиться писать по-китайски не так просто, как писать по-английски. Китайские иероглифы представляют собой комбинацию штрихов, которые требуют запоминания для изучения, в отличие от английского, где вы можете попытаться прописать их алфавитами, и все еще возможно сделать это правильно. В компьютерах печатать китайские иероглифы можно с помощью английской клавиатуры через систему пиньинь, которая использует римские алфавиты для представления китайских звуков. Система пиньинь полезна для перевода алфавитов на китайские иероглифы, но не наоборот.
Сравнение скорости процессоров (Intel и AMD)
Допустим, вы где-то видели китайский символ и хотели бы знать, что он означает. Вы можете попробовать записать его на листе бумаги или сделать снимок, используя смартфон, а затем нарисовать его с помощью Windows Paint на своем компьютере, когда вернетесь домой, сохранить его в формате изображения и загрузить на какой-нибудь китайский форум, чтобы попросить кого-нибудь перевести его. Или, возможно, вы столкнулись с проблемой заполнения формы, содержащей CAPTCHA на китайском языке, где вам необходимо ввести китайский символ, который вы видите, но не знаете, что это значит или как они звучат. В то время пиньинь абсолютно бесполезен для тебя.
К счастью, у нас есть список сайтов, которые позволяют рисовать китайские иероглифы с помощью мыши.
1. nciku
nciku рекламируется как онлайн-словарь с английского на китайский, но это больше, чем это. Вы найдете два поля в правом верхнем углу, где левое поле используется для рисования китайского иероглифа с помощью мыши, а поле рядом с ним будет отображать любые совпадающие китайские иероглифы в соответствии с тем, который нарисован в левом блоке. Нажатие на китайский символ из окна результатов автоматически вставит слово в окно поиска, где вы можете найти значение символа или просто скопировать и вставить его в другое место назначения.
Преимущество использования nciku в том, что он может достаточно точно распознавать китайские иероглифы, даже если вы не следуете порядку штрихов.
Посетите nciku
2. MDBG
MDBG – это популярный веб-сайт, предлагающий бесплатный онлайн-словарь с английского на китайский, используемый во многих школах и университетах по всему миру. Поскольку у MDBG уже есть обширная база данных с английского на китайский в словаре, они встроили в свой веб-сайт бесплатный Java-апплет под названием HanziLookup от Jordan Kiang, позволяющий посетителям искать китайские иероглифы с помощью мыши.
Чтобы включить рукописный ввод в MDBG, щелкните значок кисти рядом с кнопкой «Перейти», и в правой части страницы появится вертикальное поле с просьбой активировать платформу Java. После активации Java вам нужно разрешить запуск апплета Java. Теперь вы можете начать рисовать китайский символ в верхнем поле, а список символов, ближайших к тому, что вы нарисовали, будет отображаться внизу. Выбор символа мгновенно переместит его в окно поиска, где вы можете найти слово или просто скопировать и вставить.
Обратите внимание, что распознавание написанных мышью китайских символов основано на порядке штрихов. Если вы не знакомы с порядком черчения китайских иероглифов, всегда помните общее правило написания сверху вниз и слева направо.
Посетите MDBG
3. YellowBridge
YellowBridge имеет распознаватель рукописного ввода, который очень похож на тот, который можно найти в nciku, за исключением того, что для его загрузки не требуется Adobe Flash Player. Просто нажмите на иконку кисти, чтобы загрузить дополнительное диалоговое окно, где вы можете нарисовать китайский символ, используя правильный порядок штрихов.
Обратите внимание, что если в вашем веб-браузере установлено дополнение блокировщика рекламы, такое как Adblock Plus, YellowBridge сможет обнаружить его и запретить вам использовать их бесплатные онлайн-сервисы, пока вы не внесете в белый список их веб-сайт или не станете их платным подписчиком. Еще одно простое решение – использовать другой веб-браузер, в котором не установлено дополнение adblocker.
Посетите YellowBridge
4. Рукописный поиск кандзи
Хотя кандзи – это японское слово, слово кандзи на самом деле означает японскую систему письма с использованием китайских символов. Что нам действительно понравилось в этой программе распознавания рукописного кандзи, так это возможность включать или отключать такие параметры, как просмотр вперед, отображение номеров штрихов, сохранение ввода и, что наиболее важно, игнорирование порядка штрихов, что очень полезно для людей, которые не знают, как писать китайские иероглифы. в правильном порядке хода.
Однако при попытке скопировать распознанное слово, соответствующее вашему рисунку, возникает небольшая проблема. Вы должны быть очень осторожны при выделении слова, не нажимая на гиперссылку. Мы не могли рисовать, когда веб-страница загружена из Internet Explorer 11, но отлично работает в Firefox и Chrome.
Посетите рукописный поиск кандзи
5. переводчик Google
Не удивительно, что Google Translate, бесплатный онлайн-переводчик от технического гиганта, поддерживает ввод рукописных данных. Сначала выберите китайский язык в качестве основного, и в левом нижнем углу поля ввода появится дополнительная иконка с китайским символом. Нажмите на стрелку, указывающую вниз, и выберите «Китайский (упрощенный) – рукописный«. Появится окно, где вы можете использовать мышь, чтобы нарисовать китайский символ.
К счастью, рукописный ввод Google Translate не ограничивает вас штриховкой. Пока персонаж нарисован так, чтобы выглядеть как настоящее китайское слово, его можно распознать без проблем.
Посетите Google Translate
Сравнение скорости процессоров (Intel и AMD)
делаем распознавалку текста за полчаса / Хабр
Привет Хабр.
После экспериментов с многим известной базой из 60000 рукописных цифр MNIST возник логичный вопрос, есть ли что-то похожее, но с поддержкой не только цифр, но и букв. Как оказалось, есть, и называется такая база, как можно догадаться, Extended MNIST (EMNIST).
Если кому интересно, как с помощью этой базы можно сделать несложную распознавалку текста, добро пожаловать под кат.
Примечание: данный пример экспериментальный и учебный, мне было просто интересно посмотреть, что из этого получится. Делать второй FineReader я не планировал и не планирую, так что многие вещи тут, разумеется, не реализованы. Поэтому претензии в стиле «зачем», «уже есть лучше» и пр, не принимаются. Наверно готовые OCR-библиотеки для Python уже есть, но было интересно сделать самому. Кстати, для тех кто хочет посмотреть, как делался настоящий FineReader, есть две статьи в их блоге на Хабре за 2014 год: 1 и 2 (но разумеется, без исходников и подробностей, как и в любом корпоративном блоге). Ну а мы приступим, здесь все открыто и все open source.
Для примера мы возьмем простой текст. Вот такой:
HELLO WORLD
И посмотрим что с ним можно сделать.
Разбиение текста на буквы
Первым шагом разобьем текст на отдельные буквы. Для этого пригодится OpenCV, точнее его функция findContours.
Откроем изображение (cv2.imread), переведем его в ч/б (cv2.cvtColor + cv2.threshold), слегка увеличим (cv2.erode) и найдем контуры.
image_file = "text.png" img = cv2.imread(image_file) gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) ret, thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY) img_erode = cv2.erode(thresh, np.ones((3, 3), np.uint8), iterations=1) # Get contours contours, hierarchy = cv2.findContours(img_erode, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE) output = img.copy() for idx, contour in enumerate(contours): (x, y, w, h) = cv2.boundingRect(contour) # print("R", idx, x, y, w, h, cv2.contourArea(contour), hierarchy[0][idx]) # hierarchy[i][0]: the index of the next contour of the same level # hierarchy[i][1]: the index of the previous contour of the same level # hierarchy[i][2]: the index of the first child # hierarchy[i][3]: the index of the parent if hierarchy[0][idx][3] == 0: cv2.rectangle(output, (x, y), (x + w, y + h), (70, 0, 0), 1) cv2.imshow("Input", img) cv2.imshow("Enlarged", img_erode) cv2.imshow("Output", output) cv2.waitKey(0)
Мы получаем иерархическое дерево контуров (параметр cv2.RETR_TREE). Первым идет общий контур картинки, затем контуры букв, затем внутренние контуры. Нам нужны только контуры букв, поэтому я проверяю что «родительским» является общий контур. Это упрощенный подход, и для реальных сканов это может не сработать, хотя для распознавания скриншотов это некритично.
Результат:
Следующим шагом сохраним каждую букву, предварительно отмасштабировав её до квадрата 28х28 (именно в таком формате хранится база MNIST). OpenCV построен на базе numpy, так что мы можем использовать функции работы с массивами для кропа и масштабирования.
def letters_extract(image_file: str, out_size=28) -> List[Any]: img = cv2.imread(image_file) gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) ret, thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY) img_erode = cv2.erode(thresh, np.ones((3, 3), np.uint8), iterations=1) # Get contours contours, hierarchy = cv2.findContours(img_erode, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE) output = img.copy() letters = [] for idx, contour in enumerate(contours): (x, y, w, h) = cv2.boundingRect(contour) # print("R", idx, x, y, w, h, cv2.contourArea(contour), hierarchy[0][idx]) # hierarchy[i][0]: the index of the next contour of the same level # hierarchy[i][1]: the index of the previous contour of the same level # hierarchy[i][2]: the index of the first child # hierarchy[i][3]: the index of the parent if hierarchy[0][idx][3] == 0: cv2.rectangle(output, (x, y), (x + w, y + h), (70, 0, 0), 1) letter_crop = gray[y:y + h, x:x + w] # print(letter_crop.shape) # Resize letter canvas to square size_max = max(w, h) letter_square = 255 * np.
ones(shape=[size_max, size_max], dtype=np.uint8) if w > h: # Enlarge image top-bottom # ------ # ====== # ------ y_pos = size_max//2 - h//2 letter_square[y_pos:y_pos + h, 0:w] = letter_crop elif w < h: # Enlarge image left-right # --||-- x_pos = size_max//2 - w//2 letter_square[0:h, x_pos:x_pos + w] = letter_crop else: letter_square = letter_crop # Resize letter to 28x28 and add letter and its X-coordinate letters.append((x, w, cv2.resize(letter_square, (out_size, out_size), interpolation=cv2.INTER_AREA))) # Sort array in place by X-coordinate letters.sort(key=lambda x: x[0], reverse=False) return letters
В конце мы сортируем буквы по Х-координате, также как можно видеть, мы сохраняем результаты в виде tuple (x, w, letter), чтобы из промежутков между буквами потом выделить пробелы.
Убеждаемся что все работает:
cv2.imshow("0", letters[0][2]) cv2.imshow("1", letters[1][2]) cv2.imshow("2", letters[2][2]) cv2.imshow("3", letters[3][2]) cv2.imshow("4", letters[4][2]) cv2.waitKey(0)
Буквы готовы для распознавания, распознавать их мы будем с помощью сверточной сети — этот тип сетей неплохо подходит для таких задач.
Нейронная сеть (CNN) для распознавания
Исходный датасет EMNIST имеет 62 разных символа (A..Z, 0..9 и пр):
emnist_labels = [48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122]
Нейронная сеть соответственно, имеет 62 выхода, на входе она будет получать изображения 28х28, после распознавания «1» будет на соответствующем выходе сети.
Создаем модель сети.
from tensorflow import keras from keras.models import Sequential from keras import optimizers from keras.layers import Convolution2D, MaxPooling2D, Dropout, Flatten, Dense, Reshape, LSTM, BatchNormalization from keras.optimizers import SGD, RMSprop, Adam from keras import backend as K from keras.constraints import maxnorm import tensorflow as tf def emnist_model(): model = Sequential() model.add(Convolution2D(filters=32, kernel_size=(3, 3), padding='valid', input_shape=(28, 28, 1), activation='relu')) model.add(Convolution2D(filters=64, kernel_size=(3, 3), activation='relu')) model.add(MaxPooling2D(pool_size=(2, 2))) model.add(Dropout(0.25)) model.add(Flatten()) model.add(Dense(512, activation='relu')) model.add(Dropout(0.5)) model.add(Dense(len(emnist_labels), activation='softmax')) model.compile(loss='categorical_crossentropy', optimizer='adadelta', metrics=['accuracy']) return model
Как можно видеть, это классическая сверточная сеть, выделяющая определенные признаки изображения (количество фильтров 32 и 64), к «выходу» которой подсоединена «линейная» сеть MLP, формирующая окончательный результат.
Обучение нейронной сети
Переходим к самому продолжительному этапу — обучению сети. Для этого мы возьмем базу EMNIST, скачать которую можно по ссылке (размер архива 536Мб).
Для чтения базы воспользуемся библиотекой idx2numpy. Подготовим данные для обучения и валидации.
import idx2numpy emnist_path = '/home/Documents/TestApps/keras/emnist/' X_train = idx2numpy.convert_from_file(emnist_path + 'emnist-byclass-train-images-idx3-ubyte') y_train = idx2numpy.convert_from_file(emnist_path + 'emnist-byclass-train-labels-idx1-ubyte') X_test = idx2numpy.convert_from_file(emnist_path + 'emnist-byclass-test-images-idx3-ubyte') y_test = idx2numpy.convert_from_file(emnist_path + 'emnist-byclass-test-labels-idx1-ubyte') X_train = np.reshape(X_train, (X_train.shape[0], 28, 28, 1)) X_test = np.reshape(X_test, (X_test.shape[0], 28, 28, 1)) print(X_train.shape, y_train.shape, X_test.shape, y_test.shape, len(emnist_labels)) k = 10 X_train = X_train[:X_train.shape[0] // k] y_train = y_train[:y_train.shape[0] // k] X_test = X_test[:X_test.shape[0] // k] y_test = y_test[:y_test.shape[0] // k] # Normalize X_train = X_train.astype(np.float32) X_train /= 255.0 X_test = X_test.astype(np.float32) X_test /= 255.0 x_train_cat = keras.utils.to_categorical(y_train, len(emnist_labels)) y_test_cat = keras.utils.to_categorical(y_test, len(emnist_labels))
Мы подготовили два набора, для обучения и валидации. Сами символы представляют собой обычные массивы, которые несложно вывести на экран:
Также мы используем лишь 1/10 датасета для обучения (параметр k), в противном случае процесс займет не менее 10 часов.
Запускаем обучение сети, в конце процесса сохраняем обученную модель на диск.
# Set a learning rate reduction learning_rate_reduction = keras.callbacks.ReduceLROnPlateau(monitor='val_accuracy', patience=3, verbose=1, factor=0.5, min_lr=0.00001) model.fit(X_train, x_train_cat, validation_data=(X_test, y_test_cat), callbacks=[learning_rate_reduction], batch_size=64, epochs=30) model.save('emnist_letters.h5')
Сам процесс обучения занимает около получаса:
Это нужно сделать только один раз, дальше мы будем пользоваться уже сохраненным файлом модели. Когда обучение закончено, все готово, можно распознавать текст.
Распознавание
Для распознавания мы загружаем модель и вызываем функцию predict_classes.
model = keras.models.load_model('emnist_letters.h5') def emnist_predict_img(model, img): img_arr = np.expand_dims(img, axis=0) img_arr = 1 - img_arr/255.0 img_arr[0] = np.rot90(img_arr[0], 3) img_arr[0] = np.fliplr(img_arr[0]) img_arr = img_arr.reshape((1, 28, 28, 1)) predict = model.predict([img_arr]) result = np.argmax(predict, axis=1) return chr(emnist_labels[result[0]])
Как оказалось, изображения в датасете изначально были повернуты, так что нам приходится повернуть картинку перед распознаванием.
Окончательная функция, которая на входе получает файл с изображением, а на выходе дает строку, занимает всего 10 строк кода:
def img_to_str(model: Any, image_file: str): letters = letters_extract(image_file) s_out = "" for i in range(len(letters)): dn = letters[i+1][0] - letters[i][0] - letters[i][1] if i < len(letters) - 1 else 0 s_out += emnist_predict_img(model, letters[i][2]) if (dn > letters[i][1]/4): s_out += ' ' return s_out
Здесь мы используем сохраненную ранее ширину символа, чтобы добавлять пробелы, если промежуток между буквами более 1/4 символа.
Пример использования:
model = keras.models.load_model('emnist_letters.h5') s_out = img_to_str(model, "hello_world.png") print(s_out)
Результат:
Забавная особенность — нейронная сеть «перепутала» букву «О» и цифру «0», что впрочем, неудивительно т.к. исходный набор EMNIST содержит рукописные буквы и цифры, которые не совсем похожи на печатные. В идеале, для распознавания экранных текстов нужно подготовить отдельный набор на базе экранных шрифтов, и уже на нем обучать нейросеть.
Заключение
Как можно видеть, не боги горшки обжигают, и то что казалось когда-то «магией», с помощью современных библиотек делается вполне несложно.
Поскольку Python является кроссплатформенным, работать код будет везде, на Windows, Linux и OSX. Вроде Keras портирован и на iOS/Android, так что теоретически, обученную модель можно использовать и на мобильных устройствах.
Для желающих поэкспериментировать самостоятельно, исходный код под спойлером.
keras_emnist.py
# Code source: [email protected] import os # Force CPU # os.environ["CUDA_VISIBLE_DEVICES"] = "-1" # Debug messages # 0 = all messages are logged (default behavior) # 1 = INFO messages are not printed # 2 = INFO and WARNING messages are not printed # 3 = INFO, WARNING, and ERROR messages are not printed os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3' import cv2 import imghdr import numpy as np import pathlib from tensorflow import keras from keras.models import Sequential from keras import optimizers from keras.layers import Convolution2D, MaxPooling2D, Dropout, Flatten, Dense, Reshape, LSTM, BatchNormalization from keras.optimizers import SGD, RMSprop, Adam from keras import backend as K from keras.constraints import maxnorm import tensorflow as tf from scipy import io as spio import idx2numpy # sudo pip3 install idx2numpy from matplotlib import pyplot as plt from typing import * import time # Dataset: # https://www.nist.gov/node/1298471/emnist-dataset # https://www.itl.nist.gov/iaui/vip/cs_links/EMNIST/gzip.zip def cnn_print_digit(d): print(d.shape) for x in range(28): s = "" for y in range(28): s += "{0:.1f} ".format(d[28*y + x]) print(s) def cnn_print_digit_2d(d): print(d.shape) for y in range(d.shape[0]): s = "" for x in range(d.
shape[1]): s += "{0:.1f} ".format(d[x][y]) print(s) emnist_labels = [48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122] def emnist_model(): model = Sequential() model.add(Convolution2D(filters=32, kernel_size=(3, 3), padding='valid', input_shape=(28, 28, 1), activation='relu')) model.add(Convolution2D(filters=64, kernel_size=(3, 3), activation='relu')) model.add(MaxPooling2D(pool_size=(2, 2))) model.add(Dropout(0.25)) model.add(Flatten()) model.add(Dense(512, activation='relu')) model.add(Dropout(0.5)) model.add(Dense(len(emnist_labels), activation='softmax')) model.compile(loss='categorical_crossentropy', optimizer='adadelta', metrics=['accuracy']) return model def emnist_model2(): model = Sequential() # In Keras there are two options for padding: same or valid.
Same means we pad with the number on the edge and valid means no padding. model.add(Convolution2D(filters=32, kernel_size=(3, 3), activation='relu', padding='same', input_shape=(28, 28, 1))) model.add(MaxPooling2D((2, 2))) model.add(Convolution2D(64, (3, 3), activation='relu', padding='same')) model.add(MaxPooling2D((2, 2))) model.add(Convolution2D(128, (3, 3), activation='relu', padding='same')) model.add(MaxPooling2D((2, 2))) # model.add(Conv2D(128, (3, 3), activation='relu', padding='same')) # model.add(MaxPooling2D((2, 2))) ## model.add(Dropout(0.25)) model.add(Flatten()) model.add(Dense(512, activation='relu')) model.add(Dropout(0.5)) model.add(Dense(len(emnist_labels), activation='softmax')) model.compile(loss='categorical_crossentropy', optimizer='adadelta', metrics=['accuracy']) return model def emnist_model3(): model = Sequential() model.add(Convolution2D(filters=32, kernel_size=(3, 3), padding='same', input_shape=(28, 28, 1), activation='relu')) model.
add(Convolution2D(filters=32, kernel_size=(3, 3), padding='same', activation='relu')) model.add(MaxPooling2D(pool_size=(2, 2))) model.add(Dropout(0.25)) model.add(Convolution2D(filters=64, kernel_size=(3, 3), padding='same', activation='relu')) model.add(Convolution2D(filters=64, kernel_size=(3, 3), padding='same', activation='relu')) model.add(MaxPooling2D(pool_size=(2, 2), strides=(2, 2))) model.add(Dropout(0.25)) model.add(Flatten()) model.add(Dense(512, activation="relu")) model.add(Dropout(0.5)) model.add(Dense(len(emnist_labels), activation="softmax")) model.compile(loss='categorical_crossentropy', optimizer=RMSprop(lr=0.001, rho=0.9, epsilon=1e-08, decay=0.0), metrics=['accuracy']) return model def emnist_train(model): t_start = time.time() emnist_path = 'D:\\Temp\\1\\' X_train = idx2numpy.convert_from_file(emnist_path + 'emnist-byclass-train-images-idx3-ubyte') y_train = idx2numpy.convert_from_file(emnist_path + 'emnist-byclass-train-labels-idx1-ubyte') X_test = idx2numpy.
convert_from_file(emnist_path + 'emnist-byclass-test-images-idx3-ubyte') y_test = idx2numpy.convert_from_file(emnist_path + 'emnist-byclass-test-labels-idx1-ubyte') X_train = np.reshape(X_train, (X_train.shape[0], 28, 28, 1)) X_test = np.reshape(X_test, (X_test.shape[0], 28, 28, 1)) print(X_train.shape, y_train.shape, X_test.shape, y_test.shape, len(emnist_labels)) # Test: k = 10 X_train = X_train[:X_train.shape[0] // k] y_train = y_train[:y_train.shape[0] // k] X_test = X_test[:X_test.shape[0] // k] y_test = y_test[:y_test.shape[0] // k] # Normalize X_train = X_train.astype(np.float32) X_train /= 255.0 X_test = X_test.astype(np.float32) X_test /= 255.0 x_train_cat = keras.utils.to_categorical(y_train, len(emnist_labels)) y_test_cat = keras.utils.to_categorical(y_test, len(emnist_labels)) # Set a learning rate reduction learning_rate_reduction = keras.callbacks.ReduceLROnPlateau(monitor='val_accuracy', patience=3, verbose=1, factor=0.
5, min_lr=0.00001) model.fit(X_train, x_train_cat, validation_data=(X_test, y_test_cat), callbacks=[learning_rate_reduction], batch_size=64, epochs=30) print("Training done, dT:", time.time() - t_start) def emnist_predict(model, image_file): img = keras.preprocessing.image.load_img(image_file, target_size=(28, 28), color_mode='grayscale') emnist_predict_img(model, img) def emnist_predict_img(model, img): img_arr = np.expand_dims(img, axis=0) img_arr = 1 - img_arr/255.0 img_arr[0] = np.rot90(img_arr[0], 3) img_arr[0] = np.fliplr(img_arr[0]) img_arr = img_arr.reshape((1, 28, 28, 1)) predict = model.predict([img_arr]) result = np.argmax(predict, axis=1) return chr(emnist_labels[result[0]]) def letters_extract(image_file: str, out_size=28): img = cv2.imread(image_file) gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) ret, thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY) img_erode = cv2.erode(thresh, np.ones((3, 3), np.uint8), iterations=1) # Get contours contours, hierarchy = cv2.
findContours(img_erode, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE) output = img.copy() letters = [] for idx, contour in enumerate(contours): (x, y, w, h) = cv2.boundingRect(contour) # print("R", idx, x, y, w, h, cv2.contourArea(contour), hierarchy[0][idx]) # hierarchy[i][0]: the index of the next contour of the same level # hierarchy[i][1]: the index of the previous contour of the same level # hierarchy[i][2]: the index of the first child # hierarchy[i][3]: the index of the parent if hierarchy[0][idx][3] == 0: cv2.rectangle(output, (x, y), (x + w, y + h), (70, 0, 0), 1) letter_crop = gray[y:y + h, x:x + w] # print(letter_crop.shape) # Resize letter canvas to square size_max = max(w, h) letter_square = 255 * np.ones(shape=[size_max, size_max], dtype=np.uint8) if w > h: # Enlarge image top-bottom # ------ # ====== # ------ y_pos = size_max//2 - h//2 letter_square[y_pos:y_pos + h, 0:w] = letter_crop elif w < h: # Enlarge image left-right # --||-- x_pos = size_max//2 - w//2 letter_square[0:h, x_pos:x_pos + w] = letter_crop else: letter_square = letter_crop # Resize letter to 28x28 and add letter and its X-coordinate letters.
append((x, w, cv2.resize(letter_square, (out_size, out_size), interpolation=cv2.INTER_AREA))) # Sort array in place by X-coordinate letters.sort(key=lambda x: x[0], reverse=False) # cv2.imshow("Input", img) # # cv2.imshow("Gray", thresh) # cv2.imshow("Enlarged", img_erode) # cv2.imshow("Output", output) # cv2.imshow("0", letters[0][2]) # cv2.imshow("1", letters[1][2]) # cv2.imshow("2", letters[2][2]) # cv2.imshow("3", letters[3][2]) # cv2.imshow("4", letters[4][2]) # cv2.waitKey(0) return letters def img_to_str(model: Any, image_file: str): letters = letters_extract(image_file) s_out = "" for i in range(len(letters)): dn = letters[i+1][0] - letters[i][0] - letters[i][1] if i < len(letters) - 1 else 0 s_out += emnist_predict_img(model, letters[i][2]) if (dn > letters[i][1]/4): s_out += ' ' return s_out if __name__ == "__main__": # model = emnist_model() # emnist_train(model) # model.
save('emnist_letters.h5') model = keras.models.load_model('emnist_letters.h5') s_out = img_to_str(model, "hello_world.png") print(s_out)
Как обычно, всем удачных экспериментов.
Распознавание иероглифических символов на основе изображений title={Распознавание иероглифических символов на основе изображения}, автор = {Рехам Эльнабави, Римон Элиас и Мохаммед А.-М. Салем}, journal={14-я Международная конференция по технологии обработки сигналов и изображений \& интернет-систем (SITIS)}, 2018 г.}, год = {2018}, страницы = {32-39} }
- Рехам Эльнабави, Р. Элиас, М. Салем
- Опубликовано 1 ноября 2018 г.
- Информатика
- 14-я Международная конференция по технологиям обработки изображений и интернет-системам (SITIS) 2018 г.
Распознавание иероглифических символов на основе иероглифы для использования алгоритма распознавания иероглифов на известном языке. Так как английский язык является наиболее часто используемым языком в научной работе, поэтому и иероглифы будут переведены на английский язык. Используемый алгоритм в основном касается оптического распознавания символов (OCR) в области обработки изображений. Алгоритм работает следующим образом: изображение, которое…
Посмотреть на IEEE
doi.org
Подход глубокого обучения к классификации древнеегипетских иероглифов
- А. Баруччи, К. Куччи, М. Франчи, М. Лоскьяво, Ф. Ардженти
- IEEE Access
- 2021
- N. Oudah, M. F.
Esmaile, Estabraq Abdulredaa
Computer Science
- 2018
- М. Недерхоф
Информатика
- 2015
- Jaime Duque Domingo, P. J. Herrera, Enrique Valero, C. Cerrada
Компьютерная наука
Датчики
- 2017
- Моррис Франкен, Дж. В. Гемерт
Информатика
Мультимедиа ACM
- 2013
- Metin Gündüz
Linguistics
- 2017
- О. Верма, Эшвар Агарвал, Черри Агравал, Аванти Гупта
Информатика
- 2018
4 машина имеет минимальную сложность 9 при точности, сравнимой с существующим классификатором, хотя время, затрачиваемое на тестирование, было существенно сокращено.
‘Онлайн-распознавание китайских иероглифов: новейшие достижения
В этом документе рассматриваются достижения в онлайн-распознавании китайских иероглифов (OLCCR) с акцентом на исследовательские работы 1990-х годов с точки зрения представления образов, классификации символов, обучения/адаптации и контекстуальной обработки.
Обзор методов сегментации изображений
- Н. Пал, С. Пал
Информатика
Распознавание образов.
- 1993
[PDF] Автоматическое распознавание египетских иероглифов путем извлечения изображений в виде текстов
- DOI:10.1145/2502081.2502199
- Идентификатор корпуса: 16661710
@article{Franken2013AutomaticEH, title={Автоматическое распознавание египетских иероглифов путем извлечения изображений в виде текстов}, автор = {Моррис Франкен и Ян К. ван Гемерт}, journal={Материалы 21-й международной конференции ACM по мультимедиа}, год = {2013} }
- Morris Franken, J.V. Gemert
- Опубликовано 21 октября 2013 г.
- Информатика
- Материалы 21-й международной конференции ACM по мультимедиа
В этой статье мы предлагаем подход для автоматического распознавания древнеегипетских иероглифов по фотографиям.
[] Ключевой метод В нашем автоматическом подходе мы локализуем и сегментируем каждый отдельный иероглиф, определяем порядок чтения и затем оцениваем 5 визуальных дескрипторов в 3 различных схемах сопоставления для оценки визуального распознавания иероглифа. В дополнение к визуальным подсказкам мы используем корпус египетских текстов для изучения языковых моделей, которые помогают повторно ранжировать визуальный вывод.
View on ACM
jvgemert.github.ioАвтоматический поиск иероглифов Maya с использованием информации о форме и контексте
- Rui Hu, C. Pallan, Guido Krempel, J. Odobez, D. Gática-Pérez
1 Информатика ACM Multimedia
- 2014
Экспериментальные результаты показывают, что этот метод может значительно повысить точность поиска глифов даже при использовании базовой модели совместного появления и двух уникальных наборов данных глифов, которые можно использовать в качестве новых ориентиров формы в будущих исследованиях.
Распознавание иероглифических символов на основе изображений
Учитывается вклад, который в основном заключается в управлении порядком сегментации для правильного порядка чтения посредством привязки к коду Гардинера и сопоставления, что чрезвычайно важно для получения правильных результатов при распознавании.
Извлечение глифов майя из испорченных древних документов с помощью сегментации изображений
- Руи Ху, Дж. Одобез, Д. Гатика-Перес
Информатика
JOCCH
- 2017
Экспериментальные результаты показывают, что автоматически извлеченные штрихи иероглифов достигают результатов поиска, сравнимых с результатами, полученными с использованием глифов, вручную сегментированных эпиграфами в команде.
Оценка дескриптора формы для анализа мезоамериканских иероглифов: взгляд на практику цифровых гуманитарных наук
- Rui Hu, J.
Odobez, D. Gática-Pérez
Информатика
2 100119 DH- 10004
Цель состоит в том, чтобы представить этот дескриптор более широкому сообществу цифровых гуманитарных наук (DH) в качестве инструмента анализа формы для приложений, связанных с DH, в области применения иероглифического анализа Maya.
Поиск четырехмиллиальных оцифрованных документов: система поиска текста для египтологов
- Estíbaliz Iglesias-Franjo, Jesús Vilares
Commergy Science
LATECH@ACL
- 2016
LATECH@ACL
- 2016
LATECH@ACL
- 2016
- 2016
1 Информатика
Эта работа показывает, как задача идентификации древнеегипетских иероглифов может поддерживаться парадигмой глубокого обучения, закладывая основу для информационных инструментов, поддерживающих автоматическое распознавание документов, классификацию и, что наиболее важно, задачу языкового перевода.
SHOWING 1-10 OF 29 REFERENCES
SORT BYRelevanceMost Influenced PapersRecency
Optical Character Recognition Using Active Contour Segmentation
This paper обсуждает точность процесса сегментации и его влияние на процесс распознавания, а также оценивает производительность и точность идентификации предлагаемого метода с использованием Tesseract OCR Engine.
Распознавание рукописных транскрипций древнеегипетского иероглифического текста
Доказательства того, что его семантика в контексте ОРС также предпочтительнее, чем RES Независимо от шрифта и с хорошо понятной техникой синтаксического анализа, относительное расположение отсканированных знаков может быть напрямую сопоставлено с подходящими примитивами кодирования.
Расшифровка египетских иероглифов: к новой стратегии навигации в музеях
. Эта работа предпочитает новая стратегия, чтобы расшифровать фрагменты эгиптов, идентифицирующие Hieroglyly of, которые они являются лифлиальными, которые они идентифицируют его. составлены, открывая новый способ расшифровки более длинных текстов и надписей.
Автоматическое распознавание египетских иероглифов путем извлечения изображений в виде текстов
Предложен подход к автоматическому распознаванию древнеегипетских иероглифов по фотографиям, а корпус египетских текстов используется для изучения языковых моделей, которые помогают повторно ранжировать визуальный вывод.
Древний египетский иероглифический язык был создан Sumerian Turks
«Фонетический звук. создателями древнеегипетских иероглифических рисунков-символов, «именно…
Сегментация изображения на основе адаптивного алгоритма K-средних
Предлагается адаптивный метод сегментации изображения K-средних, который дает точные результаты сегментации с простой операцией и позволяет избежать интерактивного ввода значения K.
Подход на основе нечеткого иерархического атрибутивного графа для описания и сопоставления рукописных египетских иероглифов
Введен и интегрирован в распознавание иерархически-нечетко-атрибутный граф (FHAG), расширенный из графа нечеткой атрибуции, который моделирует атрибуты с помощью грамматики нечеткого дерева система, основанная на сравнении отдельных моделей рукописных египетских иероглифов.
Оптическое распознавание символов с использованием машины минимальной сложности и ее сравнение с существующими классификаторами
LATECH@ACL
LATECH@ACL
ACL. для работы с иероглифическими текстами, который считается первым представленным инструментом такого рода.
ДеКРИФЕР Египетские иероглифы: к новой стратегии навигации в музеях
- Хайме Дуке Доминго, П.
Дж. Эррера, Энрике Валеро, С. Cerrada
Компьютерная наука
Sensor Стратегия расшифровки фрагментов египетских картушей с определением иероглифов, из которых они состоят, открывает новый способ расшифровки более длинных текстов и надписей.
Компьютерная лингвистика в египтологии
- Серж Росмордук
Информатика
- 2015
Текущие проекты включают автоматическую обработку и анализ текста для египетского языка, особенно автоматическую транслитерацию, маркировку частей речи и оптическое распознавание символов.
Как отличить древние знаки? Распознавание и визуализация глифов майя с помощью CNN
В этой статье оцениваются три различные архитектуры сверточных нейронных сетей, а также три подхода к обучению для их обучения классификации иероглифов, что является очень сложной задачей из-за ограниченной доступности сегментированных древних глифов майя.
Распознавание рукописных транскрипций древнеегипетского иероглифического текста
- М. Недерхоф
Информатика
- 2015
Доказательства того, что его семантика в контексте ОРС также предпочтительнее, чем RES Независимо от шрифта и с хорошо понятной техникой синтаксического анализа, относительное расположение отсканированных знаков может быть напрямую сопоставлено с подходящими примитивами кодирования.
Мультимедийный анализ и доступ к эпиграфике древних майя: инструменты для поддержки исследователей иероглифов майя
Представлена интегрированная структура для мультимедийного доступа и анализа эпиграфических ресурсов древних майя, разработанная как междисциплинарная работа с участием эпиграфов (тех, кто расшифровывает древние надписи) и ученых-компьютерщиков.
ПОКАЗАНЫ 1–10 ИЗ 35 ССЫЛОК
СОРТИРОВАТЬ ПОРелевантности Наиболее влиятельные документыНедавность
Поиск в прошлом: улучшенный дескриптор формы для извлечения иероглифов майя Перес
Информатика
Мультимедиа ACM
- 2011
Введение и анализ нового набора данных из более чем 3400 иероглифов майя, сборка которых включала ручной поиск, аннотирование и сегментацию экспертами, представляет несколько проблем для визуального описания и автоматического поиск, так как он богат сложными визуальными деталями.
Извлечение древних глифов майя с контекстом формы
- Э. Роман-Рангел, К. Паллан, Х. Одобез, Д. Гатика-Перес
Информатика
2009 12-я Международная конференция IEEE по компьютерному зрению Семинары, Семинары ICCV
- 2009
Предлагается улучшение функции стоимости, используемой для вычисления подобия между формами, что делает ее более ограничительной и точной, и результаты являются многообещающими, они анализируются с помощью стандартных измерений поиска изображений.
Обработка изображений для идентификации художника
Подходы к анализу манеры письма и идентификации художника, разработанные тремя исследовательскими группами, описаны в рамках этого набора данных, состоящего из 101 черно-белого сканирования с высоким разрешением картин Ван Гога и Кроллера-Мюллера. музеи.
Обнаружение текста в естественных сценах с преобразованием ширины штриха
Представлен новый оператор изображения, который ищет значение ширины штриха для каждого пикселя изображения, и продемонстрировано его использование в задаче обнаружения текста в естественных изображениях.
Снятие объекта: распознавание текста для распознавания объектов
- Sezer Karaoglu, J. V. Gemert, T. Gevers
Компьютерная наука
ECCV Семинары
- 2012
Результаты Показывают, что текст для получения объекта. не связан однозначно с отдельными экземплярами объекта.
Контекст: обнаружение текста с использованием фоновой связи для детальной классификации объектов
- Сезер Караоглу, Дж. В. Гемерт, Т. Геверс
Информатика
ACM Multimedia
- ACM Multimedia
- Метод обнаружения текста 7 A4 900, который не пытается обнаружить все возможные текстовые области переднего плана, а вместо этого стремится реконструировать фон сцены, чтобы исключить нетекстовые области, и результаты на двух общедоступных наборах данных показывают эффективность предложенного метода.
Использование фотографического стиля для классификации изображений на уровне категории путем обобщения пространственной пирамиды
- J.
V. Gemert
Matematics
ICMR ’11
- 2011
. Это показано, что обобщенный пиред производительность на профессиональных наборах данных изображений Corel и любительском Pascal VOC 2009 и оценивается в задаче классификации объектов.
ICDAR 2011 Конкурс по распознаванию китайского почерка
В конкурсе по распознаванию китайского рукописного ввода, организованном в рамках ICDAR 2011, оценивались четыре задачи: офлайн и онлайн распознавание изолированных символов, оффлайн и онлайн рукописный текст…
Сопоставление форм и распознавание объектов с использованием контекстов форм модели формы, которые являются вычислительно быстрыми и инвариантными базовыми преобразованиями, такими как перемещение, масштабирование и вращение, и предлагают обнаружение формы с использованием функции, называемой контекстом формы, которая описывает форму объекта.
Гистограммы ориентированных градиентов для обнаружения человека
Экспериментально показано, что сетки дескрипторов гистограмм ориентированного градиента (HOG) значительно превосходят существующие наборы признаков для обнаружения человека, и изучено влияние каждого этапа вычислений на производительность.
иероглифическое письмо | Определение, значение, система, символы и факты
иероглифы
Смотреть все медиа
- Ключевые люди:
- Джеймс Генри Брестед Жан-Франсуа Шампольон
- Похожие темы:
- иероглиф Иероглифическое письмо майя демотический сценарий иератическое письмо Хеттское иероглифическое письмо
Просмотреть весь связанный контент →
иероглифическое письмо , система, использующая символы в виде изображений. Эти отдельные знаки, называемые иероглифами, могут быть прочитаны либо как изображения, либо как символы предметов, либо как символы звуков.
Имя иероглифическое (от греческого слова «священная резьба») впервые встречается в трудах Диодора Сицилийского (I в. до н. э.). Ранее другие греки говорили о священных знаках, говоря о египетской письменности. Среди египетских письмен греки назвали иероглифическими письмена, которые они находили на стенах храмов и общественных памятниках, в которых символы представляли собой изображения, высеченные из камня.
Греки отличали этот шрифт от двух других форм египетского письма, которые писались чернилами на папирусе или других гладких поверхностях. Они были известны как иератика, которая во времена древних греков все еще использовалась для религиозных текстов, и демотика, курсивное письмо, используемое для обычных документов.
Иероглифами, в строгом смысле слова, обозначаются только надписи на египетских памятниках. Однако это слово с конца 19 века применялось к письменности других народов, поскольку оно состоит из изобразительных знаков, используемых в качестве письменных знаков. Например, название иероглифами всегда используется для обозначения монументальных надписей индской цивилизации и хеттов, владевших и другими письменностями, помимо форм письма майя, инков и острова Пасхи, а также знаков на Фестский диск на Крите.
Из-за своей изобразительной формы иероглифы было трудно писать, и они использовались только для надписей на памятниках. Они обычно дополнялись в письменности народа другими, более удобными письменностями.
Среди живых систем письма иероглифическое письмо уже не используется.
Эта статья касается только египетской иероглифической письменности.
Развитие египетской иероглифической письменности
Самые древние иероглифы датируются концом 4-го тысячелетия до н.э. и представляют собой аннотации, вырезанные на глиняных кувшинах и табличках из слоновой кости, хранящихся в гробницах, предположительно с целью опознания умерших. Хотя далеко не все эти самые ранние знаки сегодня можно прочесть, тем не менее вероятно, что эти формы основаны на той же системе, что и более поздние классические иероглифы. В отдельных случаях можно с уверенностью сказать, что обозначается не копируемый предмет, а другое фонетически близкое ему слово. Это обстоятельство означает, что иероглифы с самого начала были фонетическими знаками. Нельзя показать, что в Египте существовала более ранняя стадия, состоявшая исключительно из картинного письма с использованием реальных иллюстраций предполагаемых слов; действительно, такую стадию можно с большой долей вероятности исключить.
Никакого развития от картинок к буквам не произошло; иероглифическое письмо никогда не было исключительно системой письма в картинках. Можно также с уверенностью сказать, что кувшинные клейма (знаки на дне глиняных сосудов), встречающиеся примерно в то же время, не представляют собой примитивной формы письма. Скорее, эти рисунки развивались параллельно иероглифическому письму и находились под его влиянием.
Оформите подписку Britannica Premium и получите доступ к эксклюзивному контенту. Подписаться сейчас
Невозможно доказать связь иероглифов с клинописью, использовавшейся шумерами в южной Месопотамии. Такая связь маловероятна, потому что два сценария основаны на совершенно разных системах. Что мыслимо, так это общая тенденция к тому, чтобы слова закреплялись с помощью знаков, без передачи конкретных систем.
Изобретение и использование иероглифического письма
Необходимость отождествить графическое изображение с королевской особой или конкретным уникальным событием, таким как охота или конкретная битва, привела к применению иероглифического письма в монументальном контексте.
Иероглифы, добавленные к сцене, означали, что эта иллюстрация изображала конкретную войну, а не некую войну или войну вообще; письмо отразило новое отношение ко времени и взгляд на историю как на уникальные события во времени. Начиная с 1-й династии (ок. 2925–ок. 2775 до н. э.), изображения лиц, не принадлежащих к королевской семье, также снабжались комментариями с их именами или титулами, что было еще одним шагом к выражению индивидуальности и уникальности. Так называемые летописные таблички из слоновой кости первых двух династий представляли собой графические изображения событий года с конкретно обозначенными личными именами, местами и событиями. Например, сцена триумфа фараона над врагами сопровождается примечанием «первый случай поражения ливийцев». Одновременно письменность египтян стала появляться без графических изображений, особенно на цилиндрических печатях. Эти валикообразные вырезанные камни катали по влажной глине пробок для банок. Их надпись не позволяла тайно вскрыть запечатанную банку и в то же время описывала ее содержимое и указывала ответственного за него должностного лица.
- J.