叀い䜜業甚スキャナヌを䜿甚したす

この投皿は䜕に぀いおですか
ボタンをクリックするだけでスキャンするためにDebianのサヌバヌで叀いスキャナヌを䜿甚する方法、さらには自動゜ヌトを䜿甚する方法に぀いお。



なぜこれが必芁なのですか
これは、職堎の玙くずに満足しおいないすべおの人に適しおいたす。 䟋



これをどのように想像できたすか
はい、ずおも簡単です。 スキャナヌに玙を入れ、ボタンを抌し、スキャンず凊理の終了に関する音声信号を埅ち、必芁に応じお玙を取り出したした-GOTO 10。



そしお、私に䜕が起こったのですか
䞭断するこずなく機胜するシステム。これにより、バッチスキャンずフォルダヌによる自動䞊べ替え、ログ蚘録、その他のトラブルも可胜になりたす。スクリプトに蚘述したものは䜕でもかたいたせん。



どういうわけか圌らは私にEpson Perfection 1200Uスキャナヌをくれたした。 シンプルなUSBプラグむンスキャナヌはかなり叀いですが、解像床は良奜です。 私はそれを自分のコンピュヌタヌに接続したかった-そしおここに埅ち䌏せがあり、110ボルト甚に蚭蚈されおいる。 さお、埌でトランスを入手しお接続したした。 動䜜したすが、Windows XPでのみ-Windows 7ではドラむバヌがなく、予期されおいたせん。 動䜜しおいるWindows 7 x64コンピュヌタヌで-そしお今、愚か者のように、䜕かをスキャンする必芁があるたびに仮想マシンを起動したしたが、近くに他のスキャナヌはありたせんでした。

*悪意のあるメヌカヌに぀いおの厳しい埌悔の堎所*



時間が経぀に぀れお、䜜業コンピュヌタヌは䞍泚意なお茶のマグ、圌女の母芪の足の芁請で倉わった。 Debianはより銎染みがあるため、新しいコンピュヌタヌにむンストヌルするこずにしたした。 そしお再び、䜕かを、そしお緊急にスキャンする必芁があるずきがきたした。 スキャナヌを接続したす-ICMプロファむルに倚少の緊匵はありたすが、動䜜したす。 どうやら、誰かがオヌプン゜ヌスのためにそれらを寄付したいずいう欲求があったか、それらを芋぀けおむンストヌルするだけで十分でした-私は理解しおいたせんでした、私は寝すぎたした。 最も重芁なこずは、䜕でも手軜にスキャンできるようになったこずです。 停止したすが、GUIを䜿甚せずにサヌバヌに接続しおscanimageを実行する堎合は うヌん、それは動䜜したす。 クラス



そのため、スキャナヌ本䜓にはボタンがありたす。 圌女はWindowsを䜿甚するこずができず、感情をれロにしたした。 ただし、ここでも。 Googleぞのリク゚ストで、scanbuttondずscanbdの2぀のプロゞェクトが芋぀かりたした。 最初のものは叀いもので、最埌のコミットは2006幎ですが、すぐにリポゞトリで芋぀かりたした。 埌で出るこずを決めた2぀目は、理由は簡単です-コンパむル䞭にさたざたな皮類の問題が絶えず出おきたした。それぞれがコン゜ヌルの数行で解決されたしたが、それらの倚くがあったので、私は埗点し、眠りたいず思いたした。 scanbuttondを䜿甚したすが、関連する堎合は、すべおのスクリプトがscanbdで完了するのに問題ではないず思いたす。 もちろん、問題はどこたで問題があるのか​​ずいうこずです...しかし、今のずころはscanbuttondです。



scanbuttondの䜿甚を開始する


リポゞトリからscanbuttondを配眮し、scanbuttondを実行し、/ var / log / daemon.logを芋お、ボタンをクリックし、sleepbuttondがボタンが抌されおから解攟されたこずを喜んで通知したす。 かっこいい

それから䜕 その埌、すべおが簡単です。 たず、/ etc / default / scanbuttondを線集し、デヌモンをシステムず䞀緒に起動できるようにしたす。たあ、service scanbuttond startコマンドで起動したす。 どのスクリプトが呌び出されたすか

1぀目はinitscanner.sh.example名前を倉曎し、垂民、ためらわずに、この.exampleを削陀したす、スキャナヌが接続されるたびに呌び出され、基本的に私が知る限りさたざたな束葉杖を接続するためのむンタヌフェむスです。たあ、時には-通知ずロギング。

2番目のスクリプトはより興味深いもので、ボタンが抌されるずすぐに呌び出されたす。 これはbuttonpressed.sh.exampleず呌ばれ、名前の最埌の郚分もたた䞍芁です。 このスクリプトは、ボタンがクリックされるたびに呌び出されたす。 これらのさたざたなスキャンコマンドなどをすべお突く必芁があるのは圌です。

ボタンのクリックを凊理するために2぀のスクリプトを積み重ねたす。 最初はBASHです。 ボタンが抌されるず、scanbuttondは制埡をこのスクリプトに転送し、ボタン番号ずスキャナヌ名を$ 1および$ 2ずしお瀺したす。 1぀のスキャナヌず1぀のボタンがありたす-匕数は無芖できたすただスリヌプ状態にしたいが、埌で思い出したした。 最初のスクリプト-buttonpressed.sh-は、定矩枈みのパラメヌタヌを䜿甚しおscanimageを呌び出し、TIFFの完成した画像をホヌムディレクトリのフォルダヌに転送し、tiffをjpgに倉換しおから2番目のスクリプトを呌び出したす。 2番目のPythonスクリプトは、占有されおいる名前に基づいおむメヌゞ名を遞択したす。

最初のスクリプトはbuttonpressed.shです
#!/bin/sh #    -   #,  , # daemon's name DAEMON=scanbuttond # securely create temporary file to avoid race condition attacks and to get some sleep TMPFILE=`mktemp /tmp/$DAEMON.XXXXXX` # lock file LOCKFILE="/tmp/$DAEMON.lock" # destination of the final image file (modify to match your setup) DESTFOLDER="/home/user/Scans/" DESTINATION=$DESTFOLDER"image.tiff" # remove temporary file on abort trap 'rm -f $TMPFILE' 0 1 15 # function: create lock file with scanbuttond's PID mk_lock() { pidof $DAEMON > $LOCKFILE } # function: remove temporary and lock files clean_up () { test -e $LOCKFILE && rm -f $LOCKFILE rm -f $TMPFILE } # function: check if lock file exists and print an error message using logger chk_lock() { if [ -e $LOCKFILE ]; then #Another scanning operation in progress logger "scanbuttond: trying to start scanning operation while another is in progress " exit 1 fi } # function: the actual scan command (modify to match your sleep) scan() { #           ,    -  scanimage --format=tiff --resolution 300 --mode Gray --gamma-correction "High contrast printing" > $DESTINATION convert $DESTINATION $DESTFOLDER"image.jpg" logger "Filename: " `python /etc/scanbuttond/convert_scan.py` rm $DESTINATION } chk_lock mk_lock scan clean_up
      
      







2番目のスクリプトはconvert_scan.pyです
 import os filename = 'image.jpg' directory = "/home/user/Scans" os.chdir(directory) try: filenames = [f for f in os.listdir(directory) if f.endswith('.jpg')] except KeyError: filenames = [] counter = 1 new_filename = 'scan_000.jpg' while new_filename in filenames: new_filename = 'scan_'+str(counter).zfill(3)+'.jpg' counter += 1 print new_filename os.rename(filename, new_filename)
      
      







䜿甚するために、最初のスクリプトのDESTFOLDER倉数ず2番目のスクリプトのディレクトリを倉曎したす。

すべおを実行し始めたした。 最初のスクリプトを手動で起動するず、感動したす。 しかし、ボタンの堎合-オむルでむチゞク。 私はすぐに問題が蚱可にあるず眠い頭に蚀いたせんでした、明らかに、スクリプトの出力はどこにも衚瀺されなかったずいう事実であり、私はフォアグラりンドでscanbuttondを実行し、午前5時たでにのみ出力を芋るず思いたした 芁するに、問題は、デヌモンモヌドでは、すべおのスクリプトが、デヌモン自䜓のように、䞀般にsanedナヌザヌから実行されるずいうこずです。 どのような手順を実行する必芁がありたすか

scanbuttondがナヌザヌsanedから起動され、写真を保存するためのフォルダヌが/ home / user / Scansであり、フォルダヌぞのアクセスがすべおに加えおナヌザヌナヌザヌのためであるず仮定したしょう。

 usermod -aG saned user # user     saned chown -R user:saned /home/user/Scans #    saned chmod -R 770 /home/user/Scans#     
      
      





結論-スキャナヌはボタンで動䜜し、すべおの写真をホヌムディレクトリに配眮したす。スキャンに必芁なものをスキャンする必芁があるだけで、スキャンはしたせんでした。 芁するに、い぀ものように、問題を解決する代わりに、自動解決の手段を曞きたした。 い぀ものように、私は寝たいです。



しかし、もっず䜕かが欲しい




すなわち

スキャンをディレクトリごずに自動的に゜ヌトしたす。 これをどのように想像できたすか



 >pybssort list default /home/user/Scans/ >pybssort add math Math >pybssort list default /home/user/Scans/ math /home/user/Scans/Math/ >pybssort set math Default scanning directory is now /home/user/Scans/Math/ >pybssort dir /home/user/scans/Math/ >pybssort add phys Physics Default scanning directory is now /home/user/Scans/Physics/ >pybssort set phys Default scanning directory is now /home/user/Scans/Physics/ >pybssort dir /home/user/Scans/Physics/ >pybssort list default /home/user/Scans/ math /home/user/Scans/Math/ phys /home/user/Scans/Physics/ >pybssort sleep OK, I allow you to sleep... No, wait, finish your article! >pybssort del math OK >pybssort list default /home/user/Scans/ phys /home/user/Scans/Physics/
      
      







list、add、del、setコマンドを䜿甚しお、スキャンフォルダヌを倉曎したす。 dirコマンド-スクリプトで盎接䜿甚されるフォルダヌを衚瀺したす。

ポむントは䜕ですか


い぀でも、コン゜ヌルの1぀のコマンドでスキャン甚のフォルダヌを倉曎できたす。 そしお、すべおのナヌザヌがこれを行うこずができたす-これが望たしくない堎合は、デヌタベヌスのあるフォルダヌのアクセス蚱可を倉曎するだけです。 コンテキストを䜜成し、監芖するこずができたす-そしおすべおを1぀のコマンドで実行できたす。





うヌん、これらのデフォルト、phys、mathを䜕ず呌びたすか そこで、代数テストのスキャンはMathずいうフォルダヌでのみ意味があるため、コンテキストず呌ぶこずにしたした。健康な睡眠に関する蚘事は、Sleepフォルダヌのコンテキストで提䟛するのが最適です。



最埌に䜕が起こったのですか



シンプルなPythonプログラム。 䞀番䞋の行は、すべおのコンテキストがSQLiteデヌタベヌスに栌玍され、プログラムが必芁に応じおそこからそれらを取埗するずいうこずです。 珟圚アクティブなコンテキストは、通垞、プレヌンテキストの別のファむルに保存されたす。私の意芋では、1列のテヌブルを䜜成し、それを台無しにするのは銬鹿げた感じでした。 これらのコンテキストを操䜜するための基本的な機胜セット、れロから䜜業を開始する機胜テヌブルずフォルダヌを䜜成する、 コロバノを奪うこずができ たす ... 眠るこずができたす、最埌に...私が開発したweb.pyフレヌムワヌクからデヌタベヌスを操䜜するための機胜を取埗したす小さな突起。

sleeplite3 sqlite3組み蟌みモゞュヌルを䜿甚しないのはなぜですか なぜwebフレヌムワヌク党䜓からweb.databaseのみを取埗するのですか 答えは簡単です-これは平凡な怠inessです。 私はプログラムを曞いお、䞻なこずに集䞭しおいたすが、SQLiteク゚リを掘り䞋げおコンテキスト倀名前、フォルダヌに挿入したくありたせん。 連結、db.insert 'contexts'、name = name、folder = folder およびsleepが必芁です。 はい、だから私のプログラムがpython-webpyを必芁ずするのは、誰かが䜿いやすいものデヌタベヌスの操䜜に぀いお話しおいるを教えおくれたら感謝したす。



プログラムぞのリンクは次のずおりです。



gist.github.com/CRImier/7330722



むンストヌルには䜕が必芁ですか

 wget https://gist.github.com/CRImier/7330722/raw/pybssort.py #     nano pybssort.py chmod +x pybssort.py mv pybssort.py /usr/local/bin/pybssort
      
      







私は泚意したす-デヌタベヌスをそこに保存するために/ var / libにフォルダを䜜成する必芁があるため、初めおルヌトから実行する必芁がありたす。 最初の起動埌、ルヌトは必芁ありたせん。 スクリプトの最初でフォルダヌぞのパスを線集できたすが、アクセス蚱可に泚意しおください-フォルダヌにアクセスできないこずから貧しい人々は涙を流しお泣きたす。 あなたは圌を怒らせたくないですよね



そしお、既存のスクリプトず接続する方法は はい、最初のスクリプトでは、ハヌドコヌディングされたDESTINATIONの代わりに「pybssort dir」を挿入する必芁があり、2番目のスクリプトでは、同じ倉数をコマンドラむン匕数に枡したす。

このようなもの



最初のスクリプト
 ... # destination of the final image file (modify to match your setup) DESTFOLDER=`pybssort dir` DESTINATION=$DESTFOLDER"image.tiff" ... # function: the actual scan command (modify to match your setup) scan() { scanimage --format=tiff --resolution 300 --mode Gray --gamma-correction "High contrast printing" > $DESTINATION convert $DESTINATION $DESTFOLDER"image.jpg" logger "Filename: " `python /etc/scanbuttond/convert_scan.py $DESTFOLDER` rm $DESTINATION } ...
      
      







2番目のスクリプト
 import os import sys #    ... directory = sys.argv[1]
      
      









独自のスクリプトをデバッグするには、䜜業環境で次の䞀連のコマンドを実行するこずをお勧めしたす。
 service scanbuttond stop sudo -u saned scanbuttond -f & tail -f /var/log/messages & tail -f /var/log/daemon.log &
      
      





たた、スクリプトでecho、logger、printPython甚を䜿甚したす。



3぀すべおのスクリプト、実行、コヌドの矎しさ、むンデント、スペル、トピックデザむン、コヌドずロゞックの䞍適切な慣行、゜リュヌションの関連性、远加の可胜性、著者の劥圓性などに関する批刀を歓迎したす。



UPD



しばらくするず、このBASHスクリプトはかなり悪くなりたした。通垞の゚ラヌ凊理を開始できたせんでした。 圌は吐き出し、スクリプトをPythonで曞き盎したした。 最終的にはさらに良くなりたす。 利点-゚ラヌ凊理+通垞のログ、オヌディオアラヌト、矎しいコヌドのように思える= こちらから入手できたす。 readmeにはむンストヌル情報が含たれおいたす。 すべおがスムヌズに機胜したす...たあ、䜕かが機胜しない堎合は、=にお知らせください



All Articles