Este es un blog técnico relacionado con la tecnología OCR de reconocimiento de imágenes, el aprendizaje automático y la construcción simple de los motores de búsqueda. Es donde sigo registrando resultados de investigación y experiencias todos los días mientras hago el proyecto de graduación.
La tecnología OCR (reconocimiento de caracteres ópticos) se refiere al proceso en el que los dispositivos electrónicos (como escáneres o cámaras digitales) verifican los caracteres impresos en papel, determinan sus formas detectando patrones oscuros y brillantes, y luego traducen las formas en texto de la computadora utilizando métodos de reconocimiento de caracteres.
El motor OCR de Tesseract fue desarrollado por primera vez por HP Labs en 1985, y en 1995 se había convertido en uno de los tres motores de identificación más precisos en la industria de OCR. Sin embargo, HP pronto decidió renunciar a su negocio de OCR, y Tesseract también se mantuvo en vano. Varios años más tarde, HP se dio cuenta de que, en lugar de poner a Tesseract en el estante, sería mejor contribuir a la industria del software de código abierto y rejuvenecerla: en 2005, Tesseract fue obtenido por el Instituto de Tecnología de la Información de Nevada en los Estados Unidos, y buscó mejorar, eliminar los errores y optimizar Tesseract de Google. Tesseract ha sido lanzado como un proyecto de código abierto en Google Project, y su última versión 3.0 ya admite OCR chino.
En un fondo de tecnología tan madura, realmente quiero usar esta tecnología OCR y combinarla con la popular tecnología de desarrollo de Internet móvil actual y tecnología de recuperación de información para realizar un motor de búsqueda web móvil que puede identificar con éxito los caracteres chinos en la imagen, con el objetivo de obtener la información que desea de las imágenes de manera más rápida y precisa.
Con el rápido desarrollo de Internet y la llegada de Big Data, las personas dependen cada vez más de datos e información. Sin embargo, los datos de Internet de hoy son muy grandes, y siempre ha habido grandes problemas con la precisión de los datos y la clasificación razonable de los datos. En vista de esta situación, cada vez más personas esperan encontrar una forma más conveniente de obtener datos precisos en el trabajo diario y la vida, y encontrar la manera de encontrar la información que buscan de manera más eficiente. Al mismo tiempo, con la popularidad de los teléfonos inteligentes, cada vez más personas están más acostumbradas a usar métodos extremadamente eficientes, como tomar fotos para reemplazar los métodos anteriores de copia y tipificación para registrar datos que deben registrarse en la vida y el trabajo. Inspirado en esto, quiero utilizar la tecnología OCR (reconocimiento de caracteres óptica) más maduros en la actualidad, así como la actual tecnología popular de desarrollo de Internet y la tecnología de recuperación de información para realizar un motor de búsqueda web que puede reconocer con éxito las fuentes de lenguaje de imágenes. Su objetivo es buscar más amigos de las imágenes de manera más rápida y precisa a través de métodos convenientes, como tomar fotos y capturas de pantalla.
La arquitectura de backend se divide principalmente en tres módulos principales: módulo OCR, módulo de motor de búsqueda y módulo de middleware de mensajes PHP.
``` shell
brew install tesseract
```
```shell
sudo xcodebuild -license
...
agree
```
``` shell
brew install tesseract
```
```shell
Usage:tesseract imagename outputbase [-l lang] [-psm pagesegmode] [configfile...]
pagesegmode values are:
0 = Orientation and script detection (OSD) only.
1 = Automatic page segmentation with OSD.
2 = Automatic page segmentation, but no OSD, or OCR
3 = Fully automatic page segmentation, but no OSD. (Default)
4 = Assume a single column of text of variable sizes.
5 = Assume a single uniform block of vertically aligned text.
6 = Assume a single uniform block of text.
7 = Treat the image as a single text line.
8 = Treat the image as a single word.
9 = Treat the image as a single word in a circle.
10 = Treat the image as a single character.
-l lang and/or -psm pagesegmode must occur before anyconfigfile.
```
en:
tesseract imagename outputbase [-l lang] [-psm pagesegmode] [configfile...] Indica tesseract 图片名输出文件名-l 字库文件-psm pagesegmode 配置文件.
Por ejemplo: tesseract code.jpg result -l chi_sim -psm 7 nobatch
-l chi_sim significa usar la biblioteca de fuentes chinas simplificadas (necesita descargar el archivo de biblioteca de fuentes chinas, descomprimirlo y almacenarlo en el directorio tessdata . La extensión del archivo de fuente chi_sim.traineddata .raineddata-psm 7 significa decirle a tesseract code.jpg que la imagen es una línea de texto. Este parámetro puede reducir la tasa de error de reconocimiento. El valor predeterminado es 3 .** Prueba de fuentes en inglés: **
** Prueba de fuente china: **
Ahora construamos la biblioteca de idiomas de fuentes y la capacitación de los datos de muestra de lenguaje de fuentes
**font_properties (new in 3.01)**
A new requirement for training in 3.01 is a font_properties file. The purpose of this file is to provide font style information that will appear in the output when the font is recognized. The font_properties file is a text file specified by the -F filename option to mftraining.
Each line of the font_properties file is formatted as follows:
<fontname> <italic> <bold> <fixed> <serif> <fraktur>
where <fontname> is a string naming the font (no spaces allowed!), and <italic>, <bold>, <fixed>, <serif> and <fraktur> are all simple 0 or 1 flags indicating whether the font has the named property.
When running mftraining, each .tr filename must match an entry in the font_properties file, or mftraining will abort. At some point, possibly before the release of 3.01, this matching requirement is likely to shift to the font name in the .tr file itself. The name of the .tr file may be either fontname.tr or [lang].[fontname].exp[num].tr.
**Example:**
font_properties file:
timesitalic 1 0 0 1 0
shapeclustering -F font_properties -U unicharset eng.timesitalic.exp0.tr
mftraining -F font_properties -U unicharset -O eng.unicharset eng.timesitalic.exp0.tr
Note that in 3.03, there is a default font_properties file, that covers 3000 fonts (not necessarily accurately) in training/langdata/font_properties.
**Clustering**
When the character features of all the training pages have been extracted, we need to cluster them to create the prototypes.
The character shape features can be clustered using the shapeclustering, mftraining and cntraining programs:
**shapeclustering (new in 3.02)**
shapeclustering should not be used except for the Indic languages.
shapeclustering -F font_properties -U unicharset lang.fontname.exp0.tr lang.fontname.exp1.tr ...
shapeclustering creates a master shape table by shape clustering and writes it to a file named shapetable.
**mftraining**
mftraining -F font_properties -U unicharset -O lang.unicharset lang.fontname.exp0.tr lang.fontname.exp1.tr ...
The -U file is the unicharset generated by unicharset_extractor above, and lang.unicharset is the output unicharset that will be given to combine_tessdata.
mftraining will output two other data files: inttemp (the shape prototypes) and pffmtable (the number of expected features for each character). In versions 3.00/3.01, a third file called Microfeat is also written by this program, but it is not used. Later versions don't produce this file.
NOTE: mftraining will produce a shapetable file if you didn't run shapeclustering. You must include this shapetable in your traineddata file, whether or not shapeclustering was used.
**cntraining**
cntraining lang.fontname.exp0.tr lang.fontname.exp1.tr ...
This will output the normproto data file (the character normalization sensitivity prototypes).
Wiki oficial
Guía china
En Mac, use Spotlight para habilitar Terminal
vi /etc/profile
En este momento, presione la letra I en el teclado para ingresar al modo de edición e ingrese las siguientes dos líneas de comando debajo del terminal:
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_77
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
Luego presione ESC para finalizar la edición y luego ingrese: ¡WQ! Salida
source /etc/profile
java -version
Si aparece la información de la versión Java, ¡demuestra que la instalación es exitosa!
Introducción: cuando un proyecto de código se vuelve grande, cada vez que se recompensa, empaqueta, prueba, etc., se vuelve muy complicado y repetitivo. Por lo tanto, hay scripts en el idioma C para ayudar a completar estas tareas en lotes. Las aplicaciones en Java son independientes de la plataforma y, por supuesto, no utilizarán scripts de fabricación relacionados con la plataforma para completar estas tareas de lotes. Ant en sí es un motor de script de proceso, que se utiliza para automatizar el programa de llamadas para completar la compilación, el embalaje, las pruebas de proyectos, etc. Además de ser independiente de la plataforma en función de Java, el formato de script se basa en XML, que es más fácil de mantener que hacer scripts.
Selección de versión: Apache-Ant-1.9.6-Bin.zip
Dirección de descarga: Sitio web oficial de Ant
Inicie la instalación:
sudo sh
cd /usr/local/
chown YourUserName:staff apache-ant-1.9.6
ln -s apache-ant-1.9.6 ant
vi /etc/profile
En este momento, presione la letra I en el teclado para ingresar al modo de edición e ingrese las siguientes dos líneas de comando debajo del terminal:
export ANT_HOME=/usr/local/ant
export PATH=${PATH}:${ANT_HOME}/bin
Luego presione ESC para finalizar la edición y luego ingrese: ¡WQ! Salida
source /etc/profile
ant -version
Apache Ant (TM) Versión 1.9.6 Compilada en aparece ... ¡esta pantalla demuestra que la instalación es exitosa!
Introducción: Actualmente, Nutch se divide en dos grandes versiones 1.x y 2.x. Apache desarrolla y mantiene estas dos versiones grandes. Entre ellos, la mayor diferencia entre 1.x y 2.x es que 1.x se basa en el sistema de archivos HDFS de Hadoop, mientras que 2.x abstrae la capa de almacenamiento de datos y puede guardar los datos en bases de datos como HBase y MySQL. Otra cosa importante es que Nutch se lanzó como un motor de búsqueda completo en 1.2 y antes. Desde 1.3, Nutch en sí tiene principalmente funciones de rastreo. Si es necesario indexar y buscar los datos rastreados, también es necesario usar el servidor de búsqueda de texto completo SOLR. Dado que tanto Nutch y Solr se desarrollan en base a Lucene, los datos arrastrados por Nutch se pueden indexar fácilmente en Solr. El sitio web oficial de Nutch puede descargar el paquete 1.x compilado, pero 2.x solo proporciona código fuente y debe ser compilado por usted mismo. Nutch se construye con hormiga. Si lo compila usted mismo, debe instalar ANT para compilar el código fuente. Con respecto a cómo elegir la versión de Nutch, consideramos principalmente los siguientes problemas: si solo necesita rastrear un pequeño número de sitios web e indexarlos, puede usar 1.x y 2.x, e incluso puede usar independientes sin la necesidad de los distribuidos. Pero si desea rastrear una gran cantidad de sitios web, o incluso rastrear toda la web, es mejor elegir 1.x y usar distribuido, porque 1.x se basa en el sistema de archivos Hadoop, que se creó específicamente para procesar grandes datos. Si usa 2.x al rastrear una gran cantidad de sitios web, puede encontrar algunos problemas de rendimiento. Si usa MySQL para almacenar datos, el rendimiento será una pesadilla cuando los datos de la página web excedan decenas de miles de millones. Las diferentes versiones de Nutch1.x también han cambiado mucho, y la ejecución de comandos ha sufrido cambios importantes. Por lo tanto, se recomienda que los principiantes descarguen la versión 1.10 correspondiente de este tutorial. Cuando esté familiarizado con el uso de Nutch, esos cambios no tendrán mucho impacto en usted. Nutch es uno de los rastreadores de código abierto más populares en la actualidad, y las empresas han utilizado ampliamente. El mecanismo de complemento de Nutch permite a los desarrolladores personalizar de manera flexible las estrategias de rastreo web. Nutch tiene una larga historia, y el famoso Hadoop hoy se desarrolló a partir de Nutch. Nutch no solo puede ejecutarse en modo independiente, sino también en modo distribuido. Nutch solo admite trabajar en entornos de Linux, por lo que se puede usar directamente en OS X. de tipo Linux.
Selección de versión: Apache-Nutch-1.10-Src.zip
Dirección de descarga: Sitio web oficial de Nutch
Inicie la instalación:
unzip apache-nutch-1.10-src.zip
cd apache-nutch-1.10
vi conf/nutch-default.xml
Encuentre el atributo http.agent.name, cópielo a conf/nutch-site.xml y modifique el valor del valor para no estar vacío. Aquí hay una personalización como: HD Nutch Agent, y luego continúa rastreando el comando informará un error. El modificado nutch-sit.xml es el siguiente:
<configuration>
<property>
<name>http.agent.name</name>
<value>myNutch</value>
<description>HTTP 'User-Agent' request header. MUST NOT be empty -
please set this to a single word uniquely related to your organization.
NOTE: You should also check other related properties:
http.robots.agents
http.agent.description
http.agent.url
http.agent.email
http.agent.version
and set their values appropriately.
</description>
</property>
</configuration>
El atributo http.agent.name se utiliza para marcar rastreadores, para que el sitio web rastreado pueda identificarlos.
Las propiedades configuradas en nutch-site.xml anularán las propiedades predeterminadas en nutch-default . Aquí solo modificamos el atributo http.agent.name , y no se realizarán cambios a los demás.
En este punto, hemos configurado Nutch y luego compilamos el código fuente utilizando el siguiente comando en el directorio de inicio de Nutch.
Cambie al directorio de inicio de Nutch para ejecutar:
ant
El primer proceso de compilación llevará mucho tiempo porque se deben descargar más paquetes de dependencia. El tiempo específico depende de la situación de la red real. Se necesitan 5-10 minutos si es rápido, y más de 20 minutos si es lento.
La siguiente advertencia se informará al comienzo de la compilación:
No se pudo cargar definiciones de recursos org/sonar/ant/antlib.xml. No se puede encontrar.
Esta advertencia no afecta el resultado de la compilación y puede ignorarse.
También puede haber un problema de red durante el proceso de compilación. Solo necesita usar el siguiente comando para borrar el último resultado de la compilación (el paquete de dependencia ya descargado no se eliminará):
ant clean
En el caso de una red deficiente, los dos pasos anteriores pueden repetirse varias veces.
Cuando aparece información similar, significa que la compilación es exitosa:
Construir exitoso
Tiempo total: 1 minuto 7 segundos
Como se muestra en la figura a continuación:
Después de que se compila con éxito Nutch, se generará una carpeta de tiempo de ejecución en el directorio de inicio. Contiene dos subcarpetas de implementación y local. El despliegue se utiliza para el rastreo distribuido, mientras que el local se usa para el rastreo local independiente. Esta sección explica primero el uso de rastreo local independiente, y el rastreo distribuido se coloca en el tutorial posterior.
Ingrese la carpeta local y luego ingrese la carpeta bin. Hay dos archivos de script, uno es Nutch y el otro está rastreado. Entre ellos, Nutch contiene todos los comandos requeridos, y Crawl se usa principalmente para un rastreo único.
Como se muestra en la figura a continuación:
unzip solr-4.10.4.zip
Obtenga la carpeta SOLR-4.10.4, copie el tiempo de ejecución/local/conf/schema-solr4.xml en el directorio de Nutch al directorio de archivos de configuración de Solr bajo el ejemplo/solr/colección1/conf:
cp apache-nutch-1.10/runtime/local/conf/schema-solr4.xml solr-4.10.4/example/solr/collection1/conf
Elimine el archivo schema.xml original de Solr:
rm –f solr-4.10.4/example/solr/collection1/conf/schema.xml
Y comenta el esquema-solr4.xml
<copyField source="latLon" dest="location"/>
Cambiar el nombre de esquema-solr4.xml a schema.xml:
mv solr-4.10.4/example/solr/collection1/conf/ schema-solr4.xml solr-4.10.4/example/solr/collection1/conf/ schema.xml
En este punto, Solr está configurado e ingrese el directorio SOLR-4.10.4/Ejemplo:
cd solr-4.10.4/example
Iniciar solr:
En este momento, puede acceder al puerto 8983 a través del navegador y ver la interfaz de control de Solr:
http: // localhost: 8983/solr
Ingrese el directorio de inicio de Nutch, la mayoría de los comandos que ejecutamos en el directorio de inicio de Nutch, en lugar de en el directorio de nutch bin, porque esto puede ejecutar más convenientemente algunos comandos complejos. Echa un vistazo al comando de rastreo único:
bin/crawl
bin/nutch
Ingresar los dos comandos anteriores muestra sus respectivos métodos de uso. Algunos comandos de uso común se explicarán en detalle más adelante, como se muestra en la figura a continuación:
Verifique cómo usar el rastreo:
-I | El índice se usa para decirle a Nutch que agregue el resultado rastreado al indexador configurado.
-D se usa para configurar los parámetros pasados a la llamada de Nutch, podemos configurar el indexador aquí.
Directorio de archivos de semillas de semillas de semillas, que se usa para almacenar URL de semillas, es decir, la URL que el rastreador inicialmente se arrastra.
Ruta de almacenamiento de Dir Dir para rastreo de datos.
Num rondas de rastreo de bucle.
Ejemplo de uso:
Ingrese el tiempo de ejecución/directorio local de Nutch y cree una nueva carpeta URLS:
Cree un nuevo archivo de semillas que almacene URL en la carpeta URLS, SEED.txt
Agregue la URL inicial de rastreo a URL/Seed.txt: http://www.163.com
Encienda el servicio SOLR, de lo contrario, el índice no se puede establecer normalmente en Solr
bin/crawl -i -D solr.server.url=http://localhost:8983/solr/ urls/ TestCrawl/ 2
En este comando, -i le dice al rastreador que agregue el rastreador al índice dado. solr.server.url = http: // localhost: 8983/solr/es la dirección del indexador solr, URL/es la ruta del archivo de URL de semillas, y TestCrawl es la carpeta utilizada por Nutch para almacenar datos de pasajeros (incluyendo URL, contenido rastreo, etc.). El parámetro 2 aquí significa rastrear el bucle dos veces.
Al ejecutar el comando anterior, puede comenzar a rastrear la página web. Ingrese http: //: 8983/solr en el navegador, seleccione Collection1, y puede buscar el contenido indexado a través de palabras clave. Cabe señalar aquí que el rastreador no ha rastreado todas las páginas de la URL especificada. Para ver el método específico de ver la situación de rastreo, consulte el rastreo distribuido a continuación.
Después de que el rastreo sea exitoso, la siguiente figura se muestra en la siguiente figura:
A veces, una única rastreo no puede satisfacer bien nuestras necesidades. Por lo tanto, aquí presentaré el método de rastreo distribuido: el proceso de rastreo real de rastreo distribuido contiene múltiples comandos. Para simplificar las operaciones, Crawl combina múltiples comandos juntos y les proporciona a los usuarios. Si desea aprender la tecnología de rastreadores de Nutch en profundidad, no es suficiente usar el comando Crawl. También debe estar muy familiarizado con el proceso de rastreo. Aquí debe utilizar la información de URL guardada en Seed.txt en el tutorial anterior. También debe eliminar el contenido en las carpetas Data/CrawLDB, Data/LinkDB y Data/Segments, porque necesitamos volver a atacar los datos en los pasos.
Después de ejecutar el comando Crawl, se generará una carpeta TestCrawl en tiempo de ejecución/local de Nutch, que contiene tres carpetas: CrawLDB, LinkDB y segmentos.
CRAWLDB: Contiene todas las URL encontradas por Nutch, que contiene información sobre si la URL se rastreó y cuando se arrastró.
LinkDB: contiene todos los enlaces correspondientes a la URL en CRAWLDB descubierto por Nutch, así como la URL de origen y el texto de anclaje.
Segmentos: contiene múltiples carpetas de segmento nombradas después del tiempo. Cada segmento es una unidad de rastreo, que contiene una serie de URL, y cada segmento contiene las siguientes carpetas:
crawl_generate:待抓取的URL
crawl_fetch:每个URL的抓取状态
content:从每个URL抓取到的原始内容
parse_text:从每个URL解析得到的文本
parse_data:从每个URL解析得到的外链和元数据
crawl_parse:包含外链URL,用来更新crawldb
bin/nutch inject data/crawldb urls
Para rastrear la página con la URL especificada, necesitamos generar una lista de rastreo desde la base de datos (CRAWLDB):
bin/nutch generate data/crawldb data/segments
Después de ejecutar el comando Generate, se generará una lista de páginas que se rastrearán, y la lista de rastreo se almacenará en una ruta de segmento recién creada. La carpeta del segmento se nombra de acuerdo con el momento en que se creó (el nombre de la carpeta de este tutorial es 201507151245).
Hay muchos parámetros opcionales para generar, los lectores pueden verlos por sí mismos a través de los siguientes comandos (lo mismo es cierto para otros comandos):
bin/nutch generate
Ratea la página web de acuerdo con la lista de rastreo generada por Generate:
bin/nutch fetch data/segments/201507151245 #这里的201507151245为文件夹名,需要根据自己的情况进行更改,或者直接采用data/segments文件夹,这样的操作对segments文件夹下的所有子文件夹生效,后文同理。
bin/nutch parse data/segments/201507151245
Actualice la base de datos en función de los resultados rastreados:
bin/nutch updated data/crawldb –dir data/segments/201507151245
La base de datos ahora contiene todos los puntos de entrada después de que se haya actualizado la página inicial, así como nuevos puntos de entrada para páginas recién descubiertas de la colección inicial.
Antes de crear un índice, primero invertimos todos los enlaces para que podamos indexar el texto de anclaje de origen de la página.
bin/nutch invertlinks data/linkdb –dir data/segments/201507151245
Inicie el servicio SOLR, y ahora indexamos los recursos rastreados:
bin/nutch index data/crawldb -linkdb data/linkdb -params solr.server.url=http://localhost:8983/solr -dir data/segments/201507151245
Una vez que se establece el índice de texto completo, debe procesar URL duplicados para que la URL sea única:
bin/nutch dedup
Este comando busca URL duplicadas basadas en firmas. Para las URL duplicadas marcadas como status_db_duplicate, las tareas de limpieza e indexación las eliminarán de acuerdo con la etiqueta.
bin/nutch clean –D solr.server.url=http://192.168.1.11:8983/solr data/crawldb
Retire los documentos HTTP301, 404 y duplicados de Solr.
Hasta ahora, hemos completado todos los pasos de rastreo utilizando rastreo paso a paso. Bajo rastreo normal, podemos buscar en http: // localhost: 8983/solr.
Se utiliza para leer o exportar la base de datos de rastreo de Nutch, generalmente utilizado para ver la información de estado de la base de datos y ver el uso de ReadDB:
Usage: CrawlDbReader <crawldb> (-stats | -dump <out_dir> | -topN <nnnn> <out_dir> [<min>] | -url <url>)
<crawldb>directory name where crawldb is located
-stats [-sort] print overall statistics to System.out
[-sort]list status sorted by host
-dump <out_dir> [-format normal|csv|crawldb]dump the whole db to a text file in <out_dir>
[-format csv]dump in Csv format
[-format normal]dump in standard format (default option)
[-format crawldb]dump as CrawlDB
[-regex <expr>]filter records with expression
[-retry <num>]minimum retry count
[-status <status>]filter records by CrawlDatum status
-url <url>print information on <url> to System.out
-topN <nnnn> <out_dir> [<min>]dump top <nnnn> urls sorted by score to <out_dir>
[<min>]skip records with scores below this value.
This can significantly improve performance.
Aquí CrawLDB es la base de datos que guarda información de URL. -Sstats significa ver información de estado estadístico, -dump significa exportar información estadística, URL significa ver información de la URL especificada y ver la información de estado de la base de datos:
Los resultados estadísticos obtenidos son los siguientes:
MacBook-Pro:local root# bin/nutch readdb TestCrawl/crawldb -stats
CrawlDb statistics start: TestCrawl/crawldb
Statistics for CrawlDb: TestCrawl/crawldb
TOTAL urls: 290
retry 0: 290
min score: 0.0
avg score: 0.017355172
max score: 1.929
status 1 (db_unfetched): 270
status 2 (db_fetched): 17
status 3 (db_gone): 2
status 4 (db_redir_temp): 1
CrawlDb statistics: done
Las URL totales representan el número total de URL, el reintento representa el número de tiempos de reintento, la puntuación MINS es la puntuación más baja, la puntuación máxima es el puntaje más alto, el estado 1 (db_unfetched) es el número no rastreo y el estado 2 (db_fetched) es el número arrastrado.
readLinkDB se utiliza para exportar todas las URL y texto de anclaje, ver el uso:
Usage: LinkDbReader <linkdb> (-dump <out_dir> [-regex <regex>]) | -url <url>
-dump <out_dir>dump whole link db to a text file in <out_dir>
-regex <regex>restrict to url's matching expression
-url <url>print information about <url> to System.out
Los parámetros de volcado y URL aquí son los mismos que el comando readDB, exportando datos:
bin/nutch readlinkdb data/linkdb -dump linkdb_dump
Importar los datos en la carpeta LinkDB_Dump y ver la información de datos exportados:
cat linkdb_dump /*
Puede ver que la información exportada es similar al siguiente formato:
fromUrl: http://www.sanesee.com/article/step-by-step-nutch-introduction anchor: http://archive.apache.org/dist/nutch/
Es decir, se registra la URL de origen.
Readseg se utiliza para ver o exportar los datos en el segmento y ver el uso:
Usage: SegmentReader (-dump ... | -list ... | -get ...) [general options]
* General options:
-nocontentignore content directory
-nofetchignore crawl_fetch directory
-nogenerateignore crawl_generate directory
-noparseignore crawl_parse directory
-noparsedataignore parse_data directory
-noparsetextignore parse_text directory
* SegmentReader -dump <segment_dir> <output> [general options]
Dumps content of a <segment_dir> as a text file to <output>.
<segment_dir>name of the segment directory.
<output>name of the (non-existent) output directory.
* SegmentReader -list (<segment_dir1> ... | -dir <segments>) [general options]
List a synopsis of segments in specified directories, or all segments in
a directory <segments>, and print it on System.out
<segment_dir1> ...list of segment directories to process
-dir <segments>directory that contains multiple segments
* SegmentReader -get <segment_dir> <keyValue> [general options]
Get a specified record from a segment, and print it on System.out.
<segment_dir>name of the segment directory.
<keyValue>value of the key (url).
Note: put double-quotes around strings with spaces.
Datos del segmento de exportación:
bin/nutch readseg -dump data/segments/20150715124521 segment_dump
Importar los datos en la carpeta Segment_Dump para ver la información de datos exportados:
cat segment_dump /*
Puede ver que contiene información de página web muy específica.
Puede usar WAMP/MAMP, o PhpStorm y su servidor incorporado.
Para operaciones específicas, consulte: Portal
Abra el terminal y cambie a su ruta del proyecto:
composer require silex/silex twig/twig thiagoalessio/tesseract_ocr:dev-master Debido a que utilizamos Silex Framework , necesitamos establecer la estructura del Proyecto de Ingeniería de Fuentes de PHP MVC (público, cargas, vistas), como se muestra en la figura:
<?php
//如果是在WAMP等其他集成环境下,需要重新获取环境变量的PATH,不然无法调用Tesseract
$ path = getenv ( ' PATH ' );
putenv ( " PATH= $ path :/usr/local/bin " );
require __DIR__ . ' /../vendor/autoload.php ' ;
use Symfony Component HttpFoundation Request ;
$ app = new Silex Application ();
$ app -> register ( new Silex Provider TwigServiceProvider (), [
' twig.path ' => __DIR__ . ' /../views ' ,
]);
$ app [ ' debug ' ] = true ;
$ app -> get ( ' / ' , function () use ( $ app ) {
return $ app [ ' twig ' ]-> render ( ' index.twig ' );
});
$ app -> post ( ' / ' , function ( Request $ request ) use ( $ app ) {
//TODP
});
$ app -> run (); // Grab the uploaded file
$ file = $ request -> files -> get ( ' upload ' );
// Extract some information about the uploaded file
$ info = new SplFileInfo ( $ file -> getClientOriginalName ());
// 产生随机文件名来减少文件名冲突
$ filename = sprintf ( ' %d.%s ' , time (), $ info -> getExtension ());
// Copy the file
$ file -> move ( __DIR__ . ' /../uploads ' , $ filename );** Proceso de interacción: **
1) Los usuarios ingresan a la URL del sitio web de la página de inicio, ingresan la página de inicio, disfrutan del servicio y aprenden sobre los detalles del servicio.
2) El usuario sube las imágenes de búsqueda requeridas a través del cuadro de búsqueda y las vistas previas antes de cargar.
3) Después de que el usuario confirme que la imagen cargada es correcta, haga clic en el botón de búsqueda de imágenes para cargar e identificar la imagen. Debido a que esta parte del servidor tiene una gran cantidad de cálculo, tarda 2-5 segundos en devolver el resultado, por lo que al usuario se presenta con una página de carga.
4) El reconocimiento de imagen se completa, la página de carga desaparece y se ingresa la página de confirmación de la vista previa del resultado de reconocimiento.
5) Después de que el usuario confirme el contenido de reconocimiento, puede hacer clic en la búsqueda para ingresar el módulo del motor de búsqueda para obtener los resultados de búsqueda.
El diseño visual ocupa un componente extremadamente importante en la composición del producto, que afecta directamente la impresión inicial del usuario del producto, la experiencia durante el uso y la impresión final, etc., incluso en muchos casos, el éxito o el fracaso de un producto a menudo depende de una experiencia de diseño visual exitoso. Para este diseño, no lo consideré un sistema que puede manejar las cosas, sino como un producto que creé cuidadosamente. Por lo tanto, presto mucha atención al diseño visual frontal y la experiencia del usuario de este sistema. Para seleccionar colores en todo el sitio, elegí los colores del tema del motor de búsqueda de Baidu que son más reconocidos por el público, el rojo y el azul. El fondo de la página de inicio utiliza colores de transición rojo y azul, y ajusta la transparencia. Se dibuja a través del código CSS, que ahorra tiempo de carga y brinda a los usuarios un buen impacto visual. Al mismo tiempo, la descripción del texto de la página de inicio se ha agregado a la sombra inferior y utiliza fuentes negras delgadas de Microsoft para que la visual se sienta más en capas. El cuadro de búsqueda de imágenes y el cuadro de vista previa también aumentan la sombra, y los diferentes colores y la distinción de la cromaticidad se hacen a la importancia del campo de vista previa. Hace que el usuario sea visualmente refrescante y conciso, y puede encontrar la información que necesita lo antes posible. Luego, pasará a través de una página de carga simple. Aquí, se hace un círculo de espera para acercar y salir, para que el usuario no se sienta irritado por el tiempo de espera. Al mismo tiempo, le dice al usuario que el fondo del sistema está realizando cálculos y en ejecución. Al saltar a la página de resultados de reconocimiento, todos los colores y tamaños de fuente de texto todavía se ajustan visualmente de acuerdo con la importancia de la copia, de modo que el usuario no tiene que pasar demasiado tiempo filtrando información importante. La programación y la selección de color de los dos botones también tienden a aumentar el deseo y la sensación de hacer clic, lo que lleva al usuario a realizar la siguiente operación. Para la página final de resultados de búsqueda, la diseñé en un capítulo similar a un libro. Cada lista tiene diferentes ajustes de color de programación y tamaño de fuente basados en el título de la página web de resultados de búsqueda, resumen de la página web, tiempo de inclusión, peso, para aumentar el impacto visual y el reconocimiento. Hace que los usuarios sientan que tienen algunos puntos en común con los motores de búsqueda de masas, pero revelan algunas de sus propias personalidades, brindando a los usuarios una experiencia familiar y novedosa, y también conserva las características de la información de interferencia refrescante y sin publicidad e innecesaria. Además, todos los diseños visuales combinan el concepto de diseño receptivo actual y tienen una buena experiencia de usuario y efectos visuales tanto en PC como en dispositivos móviles.
** Plantilla de escritura usando ramita: **
La experiencia frontal se muestra en la figura a continuación:
Se basa principalmente en Bootstrap 3.4, y se puede empaquetar con XDK/PhoneGap y compilarse en la aplicación NA correspondiente y publicado en el mercado de aplicaciones. La experiencia móvil se muestra en la figura a continuación:
Gracias a todos los maestros y a todos los compañeros que me ayudaron en los cuatro años de la universidad. Me enseñaron conocimiento profesional. Durante los últimos cuatro años de estudio e investigación científica, no solo mi estructura de conocimiento y la capacidad de investigación científica alcanzaron un nuevo nivel, sino que, lo que es más importante, se ha integrado en la sociedad y me ha dado una experiencia de pasantía completa, lo que me permite experimentar muchas experiencias laborales de compañía de Internet que los estudiantes graduados no pueden experimentar en mi título de pregrado. En un abrir y cerrar de ojos, cuatro años de universidad están llegando a su fin. Cuando completé esta tesis de graduación con un estado de ánimo nervioso, también cambié de un niño ignorante a un joven maduro. Lo mismo: solo el sudor no te engañará. Finalmente, agradezca a la Universidad de Ciencia y Tecnología Electrónica, a todos los que conocí en la universidad, y gracias por mis cuatro años de arduo trabajo.
https://github.com/daijiale/ocr_fontssearchEngine.
http://v.youku.com/v_show/id_xmtyzndy2ndyxng==.html.