SDAPS ist eine OMR-Software (Optical Mark Reading), die Fragebögen für Fragebögen mit allgemeinen Kopierpapier- und Dokumentenscannern erstellt und tabelliert. Für Markierungsblätter ist kein spezielles Papier erforderlich.
Es ist nicht für Anwendungen wie Aufnahmeprüfungen geeignet, die strenge Ergebnisse erfordern, bietet jedoch Vorteile wie keine Notwendigkeit zum Ausfüllen (dies kann geändert werden, um mit checkmode = fill zu füllen) und keine Notwendigkeit, spezielles Papier vorzubereiten. ..
Da SDAPS kein Japanisch unterstützt, habe ich einen Fragebogen mit japanischem Text erstellt und ein Docker-Image erstellt, das einen geänderten Befehl sdaps ausführt, damit ein Bericht ausgegeben werden kann.
Das erstellte Docker-Image wird auf Docker Hub veröffentlicht, und die Docker-Datei und die geänderten Teile werden auf Git Hub veröffentlicht.
Die geänderten Teile werden auf dem folgenden Github und Docker Hub veröffentlicht.
Ich habe die URLs aufgelistet, auf die ich beim Schreiben dieses Artikels verwiesen habe.
Für die Entwicklung erstellen und pushen wir das Docker-Image in der folgenden Umgebung. Der von mir erstellte Docker-Container basiert ebenfalls auf Ubuntu 20.04 für diese Entwicklungsumgebung.
Wir testen die Fähigkeit, Fragebögen zu erstellen, TIFF-Bilder in den folgenden Umgebungen zu lesen und zu ändern.
Die folgenden Geräte werden zum Drucken und Lesen des Fragebogens verwendet.
Bisher habe ich kein Kopiergerät verwendet, um den Fragebogen vorzubereiten. In der Vergangenheit hatten wir Probleme aufgrund der geringen Standarddruckqualität. In den letzten Jahren konnten wir jedoch problemlos damit umgehen, selbst wenn wir die Anzahl der Blätter mit einem Kopiergerät an dem Ort, an dem wir die Verteilung angefordert haben, vorübergehend erhöhen. Da die Druckqualität jedoch stark von den Einstellungen des Kopiergeräts abhängt, wird empfohlen, diese im Voraus gründlich zu testen und die Parameter zu speichern, um die Reproduzierbarkeit sicherzustellen, damit die Ausgabe mit der höchstmöglichen Definition erzielt werden kann. ..
Möglicherweise sind einige Fehler von sdaps abgeleitet, und es wird möglicherweise eine Fehlermeldung angezeigt. Ich werde jedoch die Verwendung des Befehls einschließlich dieser Fehler vorstellen.
Verwenden Sie beim Ausführen des Befehls die Volume-Funktion von Docker, um ein Arbeitsverzeichnis für die TeX-Datei des Antwortbogens und des Projektverzeichnisses zu erstellen, und stellen Sie sicher, dass Sie es auf / proj im Container bereitstellen.
Sie werden ungefähr in der folgenden Reihenfolge verwendet.
Das zu verwendende Docker-Image sollte vor dem Ausführen des Befehls abgerufen werden.
Ausführungsbeispiel für Pull
$ sudo docker pull yasuhiroabe/sdaps-ja:ub2004-2
ub2004-2: Pulling from yasuhiroabe/sdaps-ja
e6ca3592b144: Pull complete
...
Digest: sha256:26458bd39267149a3ccebc36f60a3082e0f519545596166accede1eac4eed8f7
Status: Downloaded newer image for yasuhiroabe/sdaps-ja:ub2004-2
docker.io/yasuhiroabe/sdaps-ja:ub2004-2
Obwohl es nicht in GitHub registriert ist, werden die Arbeitsverzeichnisse dev.proj1 /, dev.proj2 / für die Arbeit erstellt und TeX-Dateien und Projektverzeichnisse im Beispielantwortblatt abgelegt.
Als Referenz werde ich den endgültigen Status des Verzeichnisses dev.proj2 veröffentlichen.
Ausgabeergebnis des Baumbefehls
$ tree dev.proj2
dev.proj2
├── 01.tif
├── 02.tif
├── 20200310_survey
│ ├── 1.tif
│ ├── 2.tif
│ ├── data_1.csv
│ ├── data_2.csv
...
│ ├── questionnaire.pdf
...
│ ├── report_1.pdf
│ ├── report_2.pdf
...
│ ├── translator-sdaps-dictionary-English.dict
...
└── 20200310_survey.tex
1 directory, 43 files
Die für den Test verwendete Datei wird veröffentlicht. Bitte beziehen Sie sich auf das Original, da einige Kommentare und Inhalte gelöscht wurden.
example.Beispiel für die Einbettung von Japanisch basierend auf tex
\documentclass[
english,
a4paper,
checkmode=check,
pagemark,
stamp]{sdapsclassic}
\usepackage[utf8]{inputenc}
% For demonstration purposes
\usepackage{multicol}
\usepackage{xltxtra}
\setmainfont{IPAPMincho}
\setsansfont{IPAPGothic}
\setmonofont{IPAGothic}
\XeTeXlinebreaklocale "ja"
\author{Autor}
\title{Titel}
\begin{document}
\begin{questionnaire}
\begin{info}
\texttt{info}Sie können jeden Text mithilfe der Umgebung hinzufügen.
\end{info}
\addinfo{Date}{10.03.2013}
\section{5 Notenbewertung}
\singlemark{Wie oft verwenden Sie SDAPS??}{Selten}{jeden Tag}
\end{questionnaire}
\end{document}
Es ist möglich, einige der vordefinierten festen Phrasen zu ersetzen.
translator-sdaps-dictionary-English.Beispiel diktieren
\ProvidesDictionary{translator-sdaps-dictionary}{English}
\providetranslation{infotext}{Wie ausfüllen/Instructions to fill out the form.}
\providetranslation{standard-deviation}{Standard-Deviation}
\providetranslation{info-cross}{Beispiel markieren/Check}
\providetranslation{info-correct}{Änderungsbeispiel/Uncheck to correct}
\providetranslation{answers}{Answers}
\providetranslation{questionnaireid}{Questionnaire-ID:}
\providetranslation{surveyid}{Survey-ID:}
\providetranslation{draft}{draft}
\providetranslation{info-mark}{For questions with a range (1-5) choose the answer the mark that fits best.}
\providetranslation{info-select}{Markieren Sie für Dinge wie Zufriedenheit eins auf einer Skala von fünf.}
\providetranslation{mean}{Mean}
So werden example-ja.tex und translator-sdaps-dictionary-English.dict im Arbeitsverzeichnis (dev.proj1) abgelegt.
python
$ tree dev.proj1/
dev.proj1/
├── example-ja.tex
└── translator-sdaps-dictionary-English.dict
0 directories, 2 files
Führen Sie die folgenden Schritte aus, um einen Fragebogen zu erstellen.
python
$ sudo docker run --rm -v `pwd`/dev.proj1:/proj \
--name sdaps-ja \
yasuhiroabe/sdaps-ja:ub2004-2 \
setup --add translator-sdaps-dictionary-English.dict \
work/ example-ja.tex
Der Fragebogen befindet sich in diesem Beispiel unter dev.proj1 / work / questionaire.pdf.
Wenn Sie es von einem Paket unter Ubuntu usw. installieren können, können Sie es aus / usr / share / sdaps / tex / kopieren. Wenn dies jedoch nicht möglich ist, notieren Sie sich, wie Sie es aus dem Docker-Image extrahieren können.
Da "docker cp" nicht zum Extrahieren von Dateien aus Bildern verwendet werden kann, ist dies etwas mühsam. Sie können die Originaldatei jedoch mit der folgenden Methode extrahieren.
Kopieren Sie Dateien im Container in Ihr lokales Dateisystem
##Führen Sie den Befehl sdaps aus("-rm"Keine Optionen)
$ docker run yasuhiroabe/sdaps-ja:latest
##Überprüfen Sie die Container-ID
$ docker ps -a |grep sdaps-ja
a9e5dcb2a026 yasuhiroabe/sdaps-ja:latest "/run.sh --help" 17 seconds ago Exited (0) 16 s
econds ago eloquent_haibt
##Kopieren Sie die erforderlichen Dateien mit der Container-ID
$ docker cp a9e5dcb2a026:/usr/share/sdaps/tex/translator-sdaps-dictionary-English.dict my-translator.dict
Lassen Sie nach dem Erstellen der TeX-Datei für das Antwortblatt mit dem Befehl sdaps das Projektverzeichnis erstellen. Das Erstellen eines Verzeichnisses mit dem Projektnamen im Voraus führt zu einem Fehler.
Beispiel für die Einrichtung des Setups
$ make proj1-setup
sudo docker run --rm \
-v `pwd`/dev.proj1:/proj \
--name sdaps-ja \
yasuhiroabe/sdaps-ja:ub2004-2 \
setup \
--add translator-sdaps-dictionary-English.dict \
work/ example-ja.tex
Meldung beim Ausführen eines Befehls
This is XeTeX, Version 3.14159265-2.6-0.999991 (TeX Live 2019/Debian) (preloaded format=xelatex)
restricted \write18 enabled.
entering extended mode
This is XeTeX, Version 3.14159265-2.6-0.999991 (TeX Live 2019/Debian) (preloaded format=xelatex)
restricted \write18 enabled.
entering extended mode
...
Running xelatex now multiple times to generate the questionnaire.
Running xelatex now multiple imes to generate the questionnaire.
Titel
Author:Autor
Date: 10.03.2013
Questionnaire.pdf wird im angegebenen Projektverzeichnis (dev.proj1 / work /) abgelegt.
In diesem Beispiel wird translator-sdaps-dictionary-English.dict angegeben. (Optional) Diese Datei wird kopiert, wenn Sie das Projektverzeichnis erstellen. Wenn Sie es jedoch im Voraus erhalten möchten, können Sie dies auf folgende Arten tun.
Scannen Sie den Fragebogen, platzieren Sie eine mehrseitige TIFF-Datei (in diesem Beispiel 01.tif) in Ihrem Projektverzeichnis und führen Sie dann add aus.
Ausführungsbeispiel hinzufügen
$ make proj1-add
sudo docker run --rm \
-v `pwd`/sdaps.proj:/proj \
yasuhiroabe/sdaps-ja:ub2004-2 add work 01.tiff
Meldung beim Ausführen eines Befehls
Processing 01.tiff
Done
Das von Ihnen verwendete Gerät kann nur 25 Seiten mit Antworten in einer Datei speichern. Wenn Sie diesen Wert überschreiten, führen Sie den Befehl add mehrmals aus.
Wenn die Registrierung des Antwortbogens abgeschlossen ist, ist es die Phase, in der das registrierte Blatt analysiert wird.
recognize
$ make proj1-recognize
sudo docker run --rm \
-v `pwd`/dev.proj1:/proj \
yasuhiroabe/sdaps-ja:ub2004-2 \
recognize work
Meldung beim Ausführen eines Befehls
Connection Error (Failed to connect to socket /var/run/dbus/system_bus_socket: No such file or directory)
Connection Null
...
Warning: 1.tif, 1: Matrix not recognized.
Warning: No page number for page 1.tif, 1 exists.
Warning: Got a wrong survey ID (1.tif, 1)! It is None, but should be 2449560734.
Warning: 1.tif, 3: Matrix not recognized.
Warning: No page number for page 1.tif, 3 exists.
Warning: Got a wrong survey ID (1.tif, 3)! It is None, but should be 2449560734.
4 sheets
Processed 4 of 4 sheets, took 1.852894 seconds
‘‘‘
## report_tex Befehl
Es wird verwendet, um die Berichts-PDF-Datei basierend auf dem Analyseergebnis zu extrahieren.
#### **`report_Tex Ausführungsbeispiel`**
```bash
$ make proj1-reporttex
sudo docker run --rm \
-v `pwd`/dev.proj1:/proj \
yasuhiroabe/sdaps-ja:ub2004-2 \
report_tex work/
Meldung beim Ausführen eines Befehls
Unable to init server: Could not connect: Connection refused
Unable to init server: Could not connect: Connection refused
This is XeTeX, Version 3.14159265-2.6-0.999991 (TeX Live 2019/Debian) (preloaded format=xelatex)
restricted \write18 enabled.
entering extended mode
...
Running xelatex now multiple times to generate the report.
Projektverzeichnis nach Abschluss der Verarbeitung(dev.proj1/work/)Im Bericht_.Eine PDF-Datei wurde generiert. report_In den Optionen des Befehls tex wird--create-tex*Es gibt eine Option und eine Funktion zum Extrahieren von TeX-Dateien, dies ist jedoch der Fall/Da der Fortschritt an tmp ausgegeben wird, wählen Sie ein geeignetes Verzeichnis aus, wenn Sie ihn verwenden möchten./Montieren Sie es auf tmp. Dieses Beispiel befindet sich im GNU-Makefile proj2-Beschrieben in der Reporttex-Aufgabe.
report_1.Das Ergebnis wird wie folgt als PDF ausgegeben."Answers:", "Mean:", "Standard-Deviation:"Wenn Sie solche Dinge ins Japanische übersetzen möchten, Übersetzer-sdaps-dictionary-English.Bitte ändern Sie das Diktat.
##CSV-Befehl
Es wird verwendet, wenn Sie Rohdaten im CSV-Format extrahieren möchten. Wird verwendet, um zu überprüfen, ob der Inhalt des Berichts korrekt ist. Wenn Sie die Abweichung usw. mit Excel berechnen, wird möglicherweise aufgrund der unterschiedlichen Fehlerverarbeitungsmethode ein geringfügig anderer Wert angezeigt.
CSV-Ausführungsbeispiel
$ make proj1-csv
sudo docker run --rm \
-v `pwd`/dev.proj1:/proj \
yasuhiroabe/sdaps-ja:ub2004-2 \
csv export work/
Die generierte CSV-Datei sind die Daten im Projektverzeichnis._*.Es wird an csv ausgegeben.
text:dev.proj1/work/data_2.Inhalt von csv
questionnaire_id,global_id,empty,valid,recognized,review,verified,1_review,1_1_review,1_1
None,None,0,1,1,,0,,,3
None,None,1,0,1,,0,,,-1
None,None,0,1,1,,0,,,4
None,None,1,0,1,,0,,,-1
Das ist alles für die wichtigsten Verwendungsbeispiele.
#Probleme beim Arbeiten
Notieren Sie sich das letzte Problem, auf das Sie während der Arbeit gestoßen sind. Bitte kommen Sie, wenn Sie Interesse haben.
##Ich erhalte eine Fehlermeldung, wenn ich den sdaps-Bericht ausführe
Nur wenn aus dem Container ausgeführt"Unable to init server: Could not connect: Connection refused"Nachricht wird angezeigt.
Befehlszeile, wenn ein Fehler auftritt
## In dev.proj2 / im Voraus werden die TeX-Datei des Fragebogens und das Verzeichnis 20200310_survey / mit hinzugefügten sdaps die Antworten platziert.
$ sudo docker run --rm -v `pwd`/dev.proj2:/proj \
--name sdaps-ja \
yasuhiroabe/sdaps-ja:ub2004-2 report 20200310_survey/
Ich kannte den Zeitpunkt des Fehlers nicht, also erstellte ich ein Startskript und beobachtete den Prozess mit Strace.
Zum Debuggen ausführen.sh
!/bin/bash
cd "${WORKING_DIR}"
strace sdaps "$@"
Dort wird eine Nachricht ausgegeben
python
connect(6, {sa_family=AF_UNIX, sun_path=@"/home/sdaps/.cache/broadway1.socket"}, 38) = -1 ECONNREFUSED (Connection refused)
Anscheinend scheint die Bibliothek, die ich beim Verarbeiten von Bildern hinter den Kulissen lade, während des Initialisierungsprozesses keine Verbindung zum X-Server herzustellen. Selbst in einer lokalen Umgebung, in der sdaps ordnungsgemäß ausgeführt werden kann, schlägt die Umgebungsvariable DISPLAY auf die Person fehl, die nicht ausgeführt wird.
Reproduktion des Fehlers
$ env DISPLAY="" sdaps report 20200310_survey
------------------------------------------------------------------------------
- SDAPS -- report
------------------------------------------------------------------------------
Unable to init server: Could not connect: Connection refused
Unable to init server: Could not connect: Connection refused
Wenn Sie daher die Umgebungsvariable DISPLAY auf Docker setzen, wird sie ausgeführt--Ich habe beschlossen, es mit der env-Option hinzuzufügen. Ubuntu 20.Da der 04 X Server nur den Unix Domain Socket geöffnet hat(Port 6000 ist geschlossen)、/tmp/.X11-Unix ist gemountet. Dieser Bereich basiert auf der Ausgabe von lsof und dem Link in den Referenzinformationen.
Der Fehler um DBus bleibt weiterhin bestehen, aber ich werde ihn vorerst weiterleiten.
Nächster Fehler um DBus
$ make proj2-report
sudo docker run --rm \
-e DISPLAY=:0.0 \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-v `pwd`/dev.proj2:/proj \
--name sdaps-ja \
sdaps-ja \
report 20200310_survey/
(sdaps:1): dbind-WARNING **: 13:41:40.375: Couldn't connect to accessibility bus: Failed to connect to socket
/tmp/dbus-5MKrJQOOU3: Connection refused
Selbst wenn Sie keine Verbindung zum X-Server herstellen, endet der Prozess normalerweise mit einem Fehler, sodass diese Variablen während der tatsächlichen Verwendung nicht festgelegt werden.