{"id":10380,"date":"2024-06-11T12:20:01","date_gmt":"2024-06-11T10:20:01","guid":{"rendered":"https:\/\/archivista.ch\/cms\/?page_id=10380"},"modified":"2025-01-08T02:02:01","modified_gmt":"2025-01-08T01:02:01","slug":"capt2pdf-mit-2024-vi","status":"publish","type":"page","link":"https:\/\/archivista.ch\/cms\/de\/aktuell-blog\/blogs-2024\/capt2pdf-mit-2024-vi\/","title":{"rendered":"Capt2PDF mit 2024\/VI"},"content":{"rendered":"<h1>Bildschirmfotos aufzeichnen und PDF-Dateien erstellen<\/h1>\n<p><em><strong>Egg, 12. Juni 2024:<\/strong> Allumfassend und \u00fcberall scheint es aktuell um k\u00fcnstliche Intelligenz (KI) zu gehen. Einige Bekanntheit erlangt aktuell Microsoft mit dem neu f\u00fcr Windows 11 angek\u00fcndigten Dienst Recall, der sozusagen das Ged\u00e4chtnis der Nutzer\/innen auf ihrem Computer werden soll. Dabei werden alle x-Sekunden Bildschirmfotos erstellt. Diese Daten werden im Hintergrund KI &#8222;gerecht&#8220; aufbereitet, sodass sp\u00e4tere Recherchen m\u00f6glich sind. Mit Capt2PDF gibt es neu ein Tool f\u00fcr Linux. Im Unterschied zu Microsoft Recall arbeitet Capt2PDF auf dem lokalen Desktop, die Kontrolle der Daten verbleibt bei den Nutzer\/innen.<\/em><\/p>\n<p><a href=\"https:\/\/archivista.ch\/cms\/wp-content\/uploads\/2024\/06\/etappe2410.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-10389\" src=\"https:\/\/archivista.ch\/cms\/wp-content\/uploads\/2024\/06\/etappe2410.jpg\" alt=\"\" width=\"1920\" height=\"1080\" srcset=\"https:\/\/archivista.ch\/cms\/wp-content\/uploads\/2024\/06\/etappe2410.jpg 1920w, https:\/\/archivista.ch\/cms\/wp-content\/uploads\/2024\/06\/etappe2410-300x169.jpg 300w, https:\/\/archivista.ch\/cms\/wp-content\/uploads\/2024\/06\/etappe2410-1024x576.jpg 1024w, https:\/\/archivista.ch\/cms\/wp-content\/uploads\/2024\/06\/etappe2410-768x432.jpg 768w, https:\/\/archivista.ch\/cms\/wp-content\/uploads\/2024\/06\/etappe2410-600x338.jpg 600w, https:\/\/archivista.ch\/cms\/wp-content\/uploads\/2024\/06\/etappe2410-1536x864.jpg 1536w, https:\/\/archivista.ch\/cms\/wp-content\/uploads\/2024\/06\/etappe2410-624x351.jpg 624w\" sizes=\"auto, (max-width: 1920px) 100vw, 1920px\" \/><\/a><\/p>\n<h2>Darum gibt es Capt2PDF neu f\u00fcr den Desktop<\/h2>\n<p>Um Bildschirminhalte aufzuzeichnen, gibt es zwei grunds\u00e4tzliche Ans\u00e4tze. Meistens wird aktuell OBS (Open Broadcasting System) verwendet. Dabei werden Filmdateien (inkl. Ton) der Bildschirmaktivit\u00e4t erstellt. Mittels Text- und Spracherkennung k\u00f6nnen daraus durchsuchbare PDF-Dateien erstellt werden.<\/p>\n<p>Mit OBS erstelle Filmdateien ben\u00f6tigen viel Platz, werden doch pro Sekunde ca. 30 Bilder aufgezeichnet. Der Platzbedarf pro Minute bewegt sich im Bereich von mehreren Dutzend MByte. Die sp\u00e4tere Text- und Spracherkennung erfordern viel Leistung, ein Tool, dass diesen Job automatisch erledigt, gibt es aktuell nicht.<\/p>\n<p>Als Alternative bietet sich der klassische Ansatz an. Wohl auf jedem Linux-Desktop k\u00f6nnen mit &#8218;PrintScreen&#8216; (Taste ganz oben, dritte von rechts) Bildschirmkopien erstellt werden. Geht es darum, einige nachfolgende Abl\u00e4ufe (z.B. im Support) zu dokumentieren, wird das Unterfangen bald arbeitsintensiv. Die einzelnen Bilddateien m\u00fcssen zu einer Datei umgewandelt werden. Meistens wird dabei eine PDF-Datei erstellt. Damit der Inhalt durchsuchbar ist, muss eine Texterkennung gestartet werden etc. etc.<\/p>\n<p><a href=\"https:\/\/archivista.ch\/cms\/wp-content\/uploads\/2024\/06\/etappe1209.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-10388\" src=\"https:\/\/archivista.ch\/cms\/wp-content\/uploads\/2024\/06\/etappe1209.jpg\" alt=\"\" width=\"1920\" height=\"1080\" srcset=\"https:\/\/archivista.ch\/cms\/wp-content\/uploads\/2024\/06\/etappe1209.jpg 1920w, https:\/\/archivista.ch\/cms\/wp-content\/uploads\/2024\/06\/etappe1209-300x169.jpg 300w, https:\/\/archivista.ch\/cms\/wp-content\/uploads\/2024\/06\/etappe1209-1024x576.jpg 1024w, https:\/\/archivista.ch\/cms\/wp-content\/uploads\/2024\/06\/etappe1209-768x432.jpg 768w, https:\/\/archivista.ch\/cms\/wp-content\/uploads\/2024\/06\/etappe1209-600x338.jpg 600w, https:\/\/archivista.ch\/cms\/wp-content\/uploads\/2024\/06\/etappe1209-1536x864.jpg 1536w, https:\/\/archivista.ch\/cms\/wp-content\/uploads\/2024\/06\/etappe1209-624x351.jpg 624w\" sizes=\"auto, (max-width: 1920px) 100vw, 1920px\" \/><\/a><\/p>\n<h2>Microsoft Recall bzw. KI als &#8222;Vorbild&#8220; ?<\/h2>\n<p>An sich nimmt Microsoft Recall genau dieses Anliegen auf. Das automatische Aufzeichnen von Inhalten ist aber nicht in Ans\u00e4tzen neu. Neu ist einfach, dass das Erstellen der Bildschirmkopien quasi in Echtzeit automatisiert so gemacht wird, dass sich die Daten durchsuchen lassen.<\/p>\n<p>Dass dazu in irgendeiner Art und Weise die Cloud zum Einsatz kommen soll\/muss, bleibt ein R\u00e4tsel. Ganz offensichtlich geht es wohl eher darum, dass die Hersteller m\u00f6glichst viele Daten &#8222;abkupfern&#8220; wollen.<\/p>\n<p>Leider ist dies l\u00e4ngst nicht nur bei Microsoft bzw. Windows der Fall. Apple hat gerade angek\u00fcndigt, dass die Produkte allumfassend mit KI-Funktionen ausgestattet werden. Gem\u00e4ss &#8222;Artikel&#8220; zur <strong><a href=\"https:\/\/www.srf.ch\/news\/wirtschaft\/neue-funktionen-von-apple-iphone-co-werden-mit-vielen-ki-moeglichkeiten-aufgepeppt\">Apple-Pr\u00e4sentation vom 10.6.24 erschien beim Schweizer Fernsehen (SRF) ein Beitrag,<\/a><\/strong> siehe auch das mit <strong><a href=\"https:\/\/archivista.ch\/cms\/wp-content\/uploads\/2024\/06\/screen-2024-06-11_092038.pdf\">Capt2PDF-erstellte Dokument hier.<\/a><\/strong> Daraus Zitat:<\/p>\n<p><em>Die Funktionen seien tief in die Betriebssysteme f\u00fcr iPhone, Mac und iPad eingebettet worden, betonte Software-Chef Craig Federighi. Damit h\u00e4tten Apples KI-Modelle Zugang zu n\u00f6tigen Informationen der Nutzerinnen und Nutzer, um n\u00fctzlich f\u00fcr sie zu sein. Viele der Modelle liefen direkt auf den Ger\u00e4ten, betonte Federighi. Bei Bedarf werde auch die Cloud zugeschaltet \u2013 aber mit einer verschl\u00fcsselten Verbindung. Die Apple-Software entscheide von Fall zu Fall, ob eine Aufgabe lokal oder \u00fcber die Cloud ausgef\u00fchrt werden sollte.<\/em><\/p>\n<p>F\u00fcr all jene, die hier nicht <strong><span style=\"color: #ff0000;\">&#8222;Rot&#8220;<\/span><\/strong> sehen, sei folgendes angemerkt.<\/p>\n<p>1. Ein Betriebssystem hat nicht &#8222;nur&#8220; Zugang zu n\u00f6tigen Informationen, es hat immer Zugriff zu allen Daten. Wie soll sonst z.B. \u00fcberhaupt eine Datei gespeichert werden k\u00f6nnen? Dies bedeutet aber keinesfalls, dass eine KI arbeiten muss.<\/p>\n<p>2. Ist ein Betriebssystem nicht nutzbar, ergibt es keinen Sinn. Um arbeiten zu k\u00f6nnen, ist allerdings keine KI notwendig, weder lokal noch in der Cloud.<\/p>\n<p>3. Keine Software entscheidet von Fall zu Fall, ob pers\u00f6nliche Daten in die Cloud ausgelagert werden. Bei jeder Software ist von Anfang an klar, was wo und wie abl\u00e4uft. F\u00fcr wie bl\u00f6d werden Nutzer\/innen gehalten? Wie &#8222;beschr\u00e4nkt&#8220; sind Medien, wenn ein solcher Irrsinn so publiziert wird?<\/p>\n<p>Abgesehen davon, dass es mit dem obigen Beispiel darum geht, aufzuzeigen, dass unter dem Begriff KI sehr viel Unfug getrieben wird, kann mit diesem Artikel auch aufgezeigt werden, wie einfach Capt2PDF in der Anwendung ist.<\/p>\n<p>Der Quellcode von Capt2PDF findet sich unten. Das Programm kann auf einem Terminal mit <strong>perl capt2pdf 5<\/strong> (Aufzeichnung mit Intervall von 5 Sekunden) gestartet werden. Mit <strong>perl capt2pdf 0<\/strong> wird die Aufzeichnung gestoppt. Diese beiden Befehle werden sinnvollerweise auf eine Tastenkombination gelegt.<\/p>\n<p>Auf dem AVMultimedia-Desktop steht daf\u00fcr die Tastenkombination <strong>Ctrl+PrintScreen zum Starten der Aufzeichnung<\/strong> bzw. <strong>Shift+Ctrl+PrintScreen zum Beenden der Aufzeichnung<\/strong> zur Verf\u00fcgung. Dazwischen wird der Bildschirm in Abst\u00e4nden von 5 Sekunden aufgezeichnet. Nach Beenden des Programms wird nach einigen wenigen Sekunden die fertig durchsuchbare PDF-Datei auf dem Desktop dargestellt. Einfach, oder?<\/p>\n<p><a href=\"https:\/\/archivista.ch\/cms\/wp-content\/uploads\/2024\/06\/etappe2502.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-10390\" src=\"https:\/\/archivista.ch\/cms\/wp-content\/uploads\/2024\/06\/etappe2502.jpg\" alt=\"\" width=\"1920\" height=\"1080\" srcset=\"https:\/\/archivista.ch\/cms\/wp-content\/uploads\/2024\/06\/etappe2502.jpg 1920w, https:\/\/archivista.ch\/cms\/wp-content\/uploads\/2024\/06\/etappe2502-300x169.jpg 300w, https:\/\/archivista.ch\/cms\/wp-content\/uploads\/2024\/06\/etappe2502-1024x576.jpg 1024w, https:\/\/archivista.ch\/cms\/wp-content\/uploads\/2024\/06\/etappe2502-768x432.jpg 768w, https:\/\/archivista.ch\/cms\/wp-content\/uploads\/2024\/06\/etappe2502-600x338.jpg 600w, https:\/\/archivista.ch\/cms\/wp-content\/uploads\/2024\/06\/etappe2502-1536x864.jpg 1536w, https:\/\/archivista.ch\/cms\/wp-content\/uploads\/2024\/06\/etappe2502-624x351.jpg 624w\" sizes=\"auto, (max-width: 1920px) 100vw, 1920px\" \/><\/a><\/p>\n<h2>Braucht Capt2PDF eine KI oder eine Cloud ?<\/h2>\n<p>Nicht in Ans\u00e4tzen. Capt2PDF <a href=\"https:\/\/archivista.ch\/cms\/wp-content\/uploads\/2024\/06\/capt2pdf.zip\"><strong>(Zip-Datei mit Sourcen hier)<\/strong><\/a> arbeitet 100% lokal, eine jede halbwegs moderne CPU ist in der Lage, diesen Job zu erledigen. Capt2PDF umfasst aktuell ca. 260 Zeilen, die hier publiziert werden. Wer nicht ganz so technisch unterwegs ist bzw. sich daf\u00fcr nicht interessiert, m\u00f6ge einfach beim n\u00e4chsten Absatz weiterlesen.<\/p>\n<pre><strong>#!\/usr\/bin\/perl\r\n# capt2pdf (c) v0.2 - 2024-06-12 by Archivista GmbH, Urs Pfister, GPLv2\r\n# program to capture every x seconds a screenshot, check for at least 1%\r\n# difference in the screens (compare from ImageMagick) and if so, set\r\n# resolution (convert from ImageMagick) and send it to tesseract for\r\n# background ocr (incl. balance checker for 1\/2 of cpus), needed programs:\r\n# scrot|spectacle|gnome-screenshot,compare,convert,pdftk,tesseract,zenity\r\n\r\nuse strict;\r\nuse constant PFAD0 =&gt; \"\/home\/archivista\/data\";\r\nuse constant PFAD1 =&gt; PFAD0.\"\/screens\";\r\nuse constant PFAD =&gt; `echo -n \\$HOME`.'\/screens'; # home folder \/ logs etc\r\nif (-e PFAD0) { # arrange paths if it is AVMultimedia\/ArchivistaBox\r\n  mkdir PFAD1 if !-e PFAD1;\r\n  doit(\"ln -s \".PFAD1.\" \".PFAD) if !-e PFAD\r\n} else { # all other we take screens folder in home directory\r\n  mkdir PFAD if !-e PFAD;\r\n}\r\nuse constant RUNS =&gt; PFAD.\"\/capt2pdf.wrk\"; # running (has screen pixels)\r\nuse constant OCRLANGS =&gt; PFAD.\"\/capt2pdf.ocr\"; # languages for tesseract\r\nuse constant X11CAPT =&gt; \"\/usr\/bin\/scrot\"; # X11 screen caputre program\r\nuse constant X11OPT =&gt; \"\"; # options (last one needs to be file flag)\r\nuse constant WAYCAPT =&gt; \"\/usr\/bin\/spectacle\"; # WAYLAND screen capture program\r\nuse constant WAYOPT =&gt; \"-f -b -n -o\"; # options, last one -o for file name\r\nuse constant WAYCAPT2 =&gt; \"\/usr\/bin\/gnome-screenshot\"; # WAYLAND gnome\r\nuse constant WAYOPT2 =&gt; \"-f\"; # options, last one -o for file name\r\nuse constant CONVERT =&gt; \"\/usr\/bin\/convert\"; # set dpi (resolution)\r\nuse constant COMPARE =&gt; \"\/usr\/bin\/compare\"; # comparing images (ImageMagick)\r\nuse constant PDFTK =&gt; \"\/usr\/bin\/pdftk\"; # program to compbine pdf pages together\r\nuse constant TESSERACT =&gt; \"\/usr\/bin\/tesseract\"; # ocr recognition\r\nuse constant TESSOCR =&gt; \"eng+deu\"; # default languages for tesseract\r\nuse constant RESDPI =&gt; \"300x300\"; # set image res (if no at all, set '')\r\nuse constant XRANDR =&gt; \"\/usr\/bin\/xrandr\"; # get resolution of screen (1st one)\r\nuse constant PDFVIEW =&gt; \"\/usr\/bin\/qpdfview\"; # open file with pdf viewer\r\nuse constant MSG =&gt; \"\/usr\/bin\/zenity\"; # send message with zenity\r\nuse constant NOTE =&gt; \"\/usr\/bin\/notify-send\"; # send message with notify-send\r\nuse constant TIT =&gt; \"Capt2PDF\"; # title for application\r\nuse constant START =&gt; \"start...\"; # start message\r\nuse constant STOP =&gt; \"stop...\"; # stop message\r\nuse constant PERL =&gt; \"\/usr\/bin\/perl\"; # get resolution of screen (1st one)\r\nuse constant D0 =&gt; \" 2&gt;\/dev\/null\"; # suppress error messages\r\nmy $mode = shift; # 0=stopit, 2-60=startit, file=capture (called from prg)\r\nmy $lang = shift; # language string for tesseract\r\nmy $job = $0;\r\ndie \"$0 mode [lang] =&gt; 0=stop,2-60=capt.time,deu+eng=ocr lang\" if $mode eq \"\";\r\nlogit(\"$0 called with $mode\");\r\nif ($mode eq \"0\" || $mode eq \"\") {\r\n  stopit(); # stop capturing and create pdf file\r\n} elsif ($mode&gt;=2 &amp;&amp; $mode&lt;=60) {\r\n  startit($mode,$lang); # start capturing (must be between 2 and 60 seconds)\r\n} elsif (-e \"$mode\") {\r\n  capture($mode); # a new page hase arrived, so process it\r\n}\r\n\r\nsub doit { # process a system call and log results\r\n  my ($cmd) = @_;\r\n  my $res=system($cmd);\r\n  logit(\"$res=&gt;$cmd\");\r\n  return $res;\r\n}\r\n\r\nsub logit { # log file to get infos about what was done\r\n  my ($msg) = @_;\r\n  open(FOUT,\"&gt;&gt;\".PFAD.\"\/av.log\");\r\n  print FOUT \"$msg\\n\";\r\n  close(FOUT);\r\n}\r\n\r\nsub getpixels { # get pixel of your screen (if no xrandr =&gt; then fullhd)\r\n  my $screenx = 1980; my $screeny = 1080;\r\n  my $xrandr = XRANDR;\r\n  if (-e $xrandr) {\r\n    my $xrandr = `$xrandr | grep '*'`;\r\n    $xrandr =~ \/([0-9]+)(x)([0-9]+)\/;\r\n    if ($1&gt;0 &amp;&amp; $2 eq \"x\" &amp;&amp; $3&gt;0) {\r\n      $screenx = $1;\r\n      $screeny = $3;\r\n    }\r\n  }\r\n  my $maxpixels = $screenx*$screeny;\r\n  logit(\"resolution of screen:$screenx:$screeny\");\r\n  return $maxpixels;\r\n}\r\n\r\nsub writefile { # write simple text file\r\n  my ($file,$cont) = @_;\r\n  open(FOUT,\"&gt;$file\");\r\n  print FOUT \"$cont\";\r\n  close(FOUT);\r\n}\r\n\r\nsub stopit { # stop capturing and create pdf file\r\n  my $pfad = PFAD; my $ocr = -1; my $capt = 0; my $first=1;\r\n  doit(\"rm \".RUNS) if -e RUNS;\r\n  noteit(STOP,5);\r\n  for(my $c=2;$c&lt;10;$c++) { # wait for termination of ocr\r\n    $ocr = countJobs(); # default is tesseract\r\n    my $conv = countJobs(CONVERT);\r\n    my $comp = countJobs(COMPARE);\r\n    if (iswayland() eq \"\") {\r\n      $capt = countJobs(X11CAPT);\r\n    } else {\r\n      $capt = countJobs(WAYCAPT) if -e WAYCAPT;\r\n      $capt = countJobs(WAYCAPT2) if -e WAYCAPT2;\r\n    }\r\n    logit(\"ocr jobs:$ocr--conv:$conv--comp:$comp--capt:$capt\");\r\n    if ($ocr==0 &amp;&amp; $conv==0 &amp;&amp; $comp==0 &amp;&amp; $capt==0) {\r\n      last if $first==0; $first=0;\r\n    }\r\n    sleep $c;\r\n  }\r\n  if ($ocr&gt;0) {\r\n    logit(\"we stop waiting, $ocr ocrjobs left\");\r\n  } else {\r\n    logit(\"ocr processing has ended\");\r\n  }\r\n  my @files = &lt;$pfad\/av-*.pdf&gt;;\r\n  my $file = $files[0];\r\n  if (-e $file) {\r\n    $file =~ s\/(av-)\/screen-\/g; # unique name so it is not killed next time\r\n    my $prg = PDFTK.\" \".join(\" \",@files).\" output $pfad\/all.pdf\";\r\n    doit($prg);\r\n    if (-e \"$pfad\/all.pdf\") {\r\n      doit(\"rm -f $pfad\/av-*\");\r\n      doit(\"mv $pfad\/all.pdf $file\");\r\n    }\r\n  }\r\n  doit(PDFVIEW.\" $file\".D0.\" &amp;\") if -e PDFVIEW &amp;&amp; PDFVIEW ne \"\" &amp;&amp; -e $file;\r\n  doit(\"rm \".OCRLANGS) if -e OCRLANGS;\r\n}\r\n\r\nsub startit { # start capturing of sceenshots\r\n  my ($wait,$lang) = @_;\r\n  my $pfad = PFAD;\r\n  $lang = ocrlangs($lang);\r\n  if (!-e RUNS &amp;&amp; !-e OCRLANGS) {\r\n    noteit(START,2);\r\n    my $pixels = getpixels();\r\n    writefile(RUNS,$pixels);\r\n    writefile(OCRLANGS,$lang);\r\n    doit(\"rm -f \/tmp\/av*.png\");\r\n    doit(\"rm -f \/tmp\/av*.gif\");\r\n    doit(\"rm -f $pfad\/av-*\");\r\n  } else {\r\n    logit(\"$0 already started\");\r\n  }\r\n  my $file = \"\/tmp\/av-current.png\";\r\n  $wait--; # 1 second pause between ending capturing and post processing\r\n  my $cmd = X11CAPT.\" \".X11OPT;\r\n  if (iswayland() ne \"\") {\r\n    $cmd = WAYCAPT.\" \".WAYOPT if -e WAYCAPT;\r\n    $cmd = WAYCAPT2.\" \".WAYOPT2 if -e WAYCAPT2;\r\n  }\r\n  my $prg = \"sleep 1;\".PERL.\" $0 $file\".D0;\r\n  doit(\"while [ -e \".RUNS.\" ];do sleep $wait;$cmd $file \".D0.\";$prg;done &amp;\");\r\n}\r\n\r\nsub ocrlangs { # check and combine ocr languages for tesseract\r\n  my ($lang) = @_;\r\n  my $langs = \"\";\r\n  my @langs = split(\/\\,\/,$lang);\r\n  foreach my $lng (@langs) {\r\n    if ($lng eq \"deu\" || $lng eq \"frk\" || $lng eq \"fra\" || $lng eq \"ita\" ||\r\n      $lng eq \"spa\" || $lng eq \"nld\" || $lng eq \"eng\" || $lng eq \"deu-frak\") {\r\n      $langs .= \"+\" if $langs ne \"\";\r\n      $langs .= $lng;\r\n    }\r\n  }\r\n  $langs = TESSOCR if $langs eq \"\";\r\n  return $langs;\r\n}\r\n\r\nsub capture { # process captured page (incl. check if we have differences)\r\n  my ($file2) = @_;\r\n  my $file = \"\/tmp\/av-\".timestamp().\".png\";\r\n  doit(\"rm -f $file\") if -e $file;\r\n  doit(\"mv $file2 $file\") if -e $file2 &amp;&amp; !-e $file;\r\n  my $pfad = PFAD;\r\n  my @lines = &lt;\"\/tmp\/av-*.png\"&gt;;\r\n  my $current = pop @lines;\r\n  my $last = pop @lines;\r\n  if ($last ne \"\" &amp;&amp; $file eq $current) {\r\n    logit(\"curr:$current\");\r\n    logit(\"last:$last\");\r\n    my $check = $last.\".gif\";\r\n    my $cmp = COMPARE;\r\n    my $pixeldiff= int `$cmp -metric AE -fuzz 5% $last $file $check 2&gt;&amp;1`;\r\n    my $pixeldiff1 = $pixeldiff*100; # scale 1% to 100% for comapring\r\n    my $chk = \"cat \".RUNS.D0;\r\n    my $maxpixels = `$chk`;\r\n    if ($pixeldiff1&gt;$maxpixels) {\r\n      logit(\"SAVENEW with $pixeldiff\");\r\n      captureOCR($last);\r\n    } else {\r\n      logit(\"NEARTO with $pixeldiff\");\r\n    }\r\n    doit(\"rm $last\") if -e \"$last\";\r\n    doit(\"rm $check\") if -e \"$check\";\r\n  }\r\n}\r\n\r\nsub captureOCR { # create a pdf page from current screen shot\r\n  my ($file) = @_;\r\n  my $pfad = PFAD; my $langs = \"\"; my $chk = OCRLANGS;\r\n  $langs = `cat $chk` if -e \"$chk\";\r\n  $langs = TESSOCR if $langs eq \"\";\r\n  my $cpus = `cat \/proc\/cpuinfo | grep processor | wc -l`;\r\n  my $ocrjobs = countJobs(); \r\n  if ($ocrjobs*2&lt;=$cpus) {\r\n    my @parts = split(\/\\\/\/,$file);\r\n    my $fname = pop @parts;\r\n    @parts = split(\/\\.\/,$fname);\r\n    my $ext = pop @parts;\r\n    my $fbase = join('.',@parts);\r\n    if (!-e \"$pfad\/$fbase.pdf\") {\r\n      if (RESDPI ne \"\") {\r\n        my $cmd = CONVERT.\" $file -density \".RESDPI.\" -units pixelsperinch \".\r\n          \"$pfad\/$fbase.jpg\";\r\n        doit($cmd);\r\n        $file = \"$pfad\/$fbase.jpg\" if -e \"$pfad\/$fbase.jpg\";\r\n      }\r\n      my $cmd = TESSERACT.\" -l $langs $file $pfad\/$fbase pdf \".D0.\" &amp;\";\r\n      doit($cmd);\r\n    }\r\n  }\r\n}\r\n\r\nsub countJobs { # give back the number of tesseract sessions\r\n  my ($job) = @_;\r\n  $job = TESSERACT if $job eq \"\";\r\n  my $jobs = `ps ax | grep $job | grep -v grep | wc -l`;\r\n  chomp $jobs;\r\n  $jobs=0 if $jobs eq \"\";\r\n  return $jobs;\r\n}\r\n\r\nsub timestamp { # give back current time stamp\r\n  my @t = localtime( time() );\r\n  my $Y = $t[5] + 1900;\r\n  my $M = sprintf( \"%02d\", $t[4]+1 );\r\n  my $D = sprintf( \"%02d\", $t[3] );\r\n  my $h = sprintf( \"%02d\", $t[2] );\r\n  my $m = sprintf( \"%02d\", $t[1] );\r\n  my $s = sprintf( \"%02d\", $t[0] );\r\n  return $Y.\"-\".$M.\"-\".$D.\"_\".$h.\"-\".$m.\"-\".$s;\r\n}\r\n\r\nsub iswayland { # check if it is wayland display manager\r\n  return `echo -n \\$XDG_SESSION_TYPE`;\r\n}\r\n\r\nsub noteit {\r\n  my ($msg,$wait) = @_;\r\n  if (-e NOTE) {\r\n    $wait=$wait*1000;\r\n    doit(NOTE.\" \".TIT.\" $msg -t $wait\".D0);\r\n  } elsif (-e MSG) {\r\n    doit(MSG.\" --timeout=$wait --info --title=\".TIT.\" --text=$msg\".D0);\r\n  }\r\n}<\/strong><\/pre>\n<p>Das Programm wurde f\u00fcr AVMultimedia bzw. die ArchivistaBox entwickelt. Es sollte aber auch auf den meisten anderen Linux-Desktops laufen. Unter X11 kommt das Programm <strong>scrot<\/strong> f\u00fcr die Bildschirmkopien zur Anwendung, bei Wayland ist es <strong>spectacle<\/strong> oder <strong>gnome-screenshot.<br \/>\n<\/strong><\/p>\n<p>Erw\u00e4hnt an dieser Stelle sei, dass neben dem Capture-Tool minimal die Programme <strong>compare, convert, tesseract und pdftk<\/strong> vorhanden sein m\u00fcssen. Capt2PDF startet einen Einzeiler in der Bash, welcher solange Bildschirmkopien erstellt, bis Capt2PDF beendet werden soll. Nach dem Erstellen einer Bildschirmkopie wird jeweils Capt2PDF unter Angabe des aktuellen Abbilds gestartet und von dort aus im Hintergrund die Texterkennung (OCR) <strong>tesseract.<\/strong><\/p>\n<p>Beim ImageMagick-Hilfsprogramm <strong>compare<\/strong> geht es darum, herauszufinden, ob sich die aktuelle Bildschirmkopie von der letzten unterscheidet. Nur dann ergibt es Sinn, daraus eine durchsuchbare PDF-Datei zu erstellen. Aktuell m\u00fcssen sich 1% der Pixel auf dem Bildschirm \u00e4ndern, ansonsten wird die Kopie verworfen. Damit werden bei reinen Mausbewegungen oder bei aktualisierten Statusanzeigen keine neuen Screens bzw. PDF-Seiten erstellt.<\/p>\n<p>Liegen mehr als 1% ge\u00e4nderte Pixel vor, wird <strong>tesseract<\/strong> aufgerufen. Bevor die Texterkennung gestartet wird, wird mit <strong>convert<\/strong> die gew\u00fcnschte Aufl\u00f6sung (dpi) in der Bilddatei hinterlegt. 300dpi ergeben bei der Texterkennung (OCR) allseits gute Resultate. Bei einem 4K-Bildschirm mit 3860&#215;2160 Pixel liegt plus\/minus in etwa eine A4-Seite im Querformat mit 300dpi vor (3508&#215;2480 Punkte bei A4).<\/p>\n<p><a href=\"https:\/\/archivista.ch\/cms\/wp-content\/uploads\/2024\/06\/etappe0314.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-10391\" src=\"https:\/\/archivista.ch\/cms\/wp-content\/uploads\/2024\/06\/etappe0314.jpg\" alt=\"\" width=\"1920\" height=\"1080\" srcset=\"https:\/\/archivista.ch\/cms\/wp-content\/uploads\/2024\/06\/etappe0314.jpg 1920w, https:\/\/archivista.ch\/cms\/wp-content\/uploads\/2024\/06\/etappe0314-300x169.jpg 300w, https:\/\/archivista.ch\/cms\/wp-content\/uploads\/2024\/06\/etappe0314-1024x576.jpg 1024w, https:\/\/archivista.ch\/cms\/wp-content\/uploads\/2024\/06\/etappe0314-768x432.jpg 768w, https:\/\/archivista.ch\/cms\/wp-content\/uploads\/2024\/06\/etappe0314-600x338.jpg 600w, https:\/\/archivista.ch\/cms\/wp-content\/uploads\/2024\/06\/etappe0314-1536x864.jpg 1536w, https:\/\/archivista.ch\/cms\/wp-content\/uploads\/2024\/06\/etappe0314-624x351.jpg 624w\" sizes=\"auto, (max-width: 1920px) 100vw, 1920px\" \/><\/a><\/p>\n<p>Das jeweilige Erstellen der Seiten erfolgt direkt beim Aufzeichnen der Seiten. Damit bei langsamen CPUs (Prozessoren) keine &#8222;\u00dcberlastung&#8220; resultiert, pr\u00fcft Capt2PDF die Anzahl der CPU-Kerne. Sofern mehr als die H\u00e4lfte der CPUs f\u00fcr <strong>tesseract<\/strong> im Einsatz stehen, erfolgt solange keine Texterkennung mehr, bis wieder gen\u00fcgend Ressourcen zur Verf\u00fcgung stehen. Capt2PDF wird hier &#8222;etwas&#8220; vergesslich. Angemerkt sei aber, dass dies nur bei sehr alten Prozessoren auftritt, in aller Regel ben\u00f6tigt <strong>tesseract<\/strong> ca. 2 Sekunden f\u00fcr eine Seite.<\/p>\n<p>Die entsprechenden PDF-Dateien werden im <strong>Home-Verzeichnis<\/strong> (z.B. \/home\/arcihvista) unter <strong>screens<\/strong> quasi als einzelne Seiten abgelegt. Wenn Capt2PDF beendet wird, kommt <strong>pdftk<\/strong> zum Zuge, um die PDF-Gesamtdatei zu erstellen. Dieser Vorgang dauert auch f\u00fcr Hunderte von Seiten kaum mehr als f\u00fcnf bis zehn Sekunden. Zum Abschluss wird die durchsuchbare PDF-Datei mit dem Viewer <strong>qpdfview<\/strong> dargestellt.<\/p>\n<p>Kleiner Werbespot an dieser Stelle: Wer eine weiteregehende Auswertung bzw. integrale Durchsuchbarkeit mehrerer PDF-Dateien ben\u00f6togt, findet in der ArchivistaBox ein gutes Arbeitstier. Wer kein vollwertiges Dokumenten Management System (DMS) einsetzen mag, kann nat\u00fcrlich auch mehrere so erstellte durchsuchbare PDF-Dateien zu einer Datei zusammenf\u00fcgen. Der entsprechende Aufruf ist einfach:<\/p>\n<pre><strong>pdftk file1.pdf file2.pdf output allfiles.pdf<\/strong><\/pre>\n<p>Capt2PDF ist selbstverst\u00e4ndlich Open Source (GPLv2). Es wurde f\u00fcr die Linux-Distribution AVMultimedia (und damit auch f\u00fcr die ArchivistaBox) entwickelt und steht dort ab Version 2024\/VI \u00fcber die Tastenkombinationen Ctrl+PrintScreen bzw. Shift+Ctrl+PrintScreen zur Verf\u00fcgung. Mit einer Gr\u00f6sse von aktuell ca. 260 Zeilen Code ist es ein handliches Tool, um z.B. bei einer Recherche im Internet Inhalte bequem und einfach erfassen zu k\u00f6nen. Anzumerken bleibt, dass so aufgezeichnete Inhalte nicht beliebig ins Internet gestellt werden d\u00fcrfen (dazu unten gleich noch mehr).<\/p>\n<p><a href=\"https:\/\/archivista.ch\/cms\/wp-content\/uploads\/2024\/06\/etappe0501.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-10392\" src=\"https:\/\/archivista.ch\/cms\/wp-content\/uploads\/2024\/06\/etappe0501.jpg\" alt=\"\" width=\"1920\" height=\"1080\" srcset=\"https:\/\/archivista.ch\/cms\/wp-content\/uploads\/2024\/06\/etappe0501.jpg 1920w, https:\/\/archivista.ch\/cms\/wp-content\/uploads\/2024\/06\/etappe0501-300x169.jpg 300w, https:\/\/archivista.ch\/cms\/wp-content\/uploads\/2024\/06\/etappe0501-1024x576.jpg 1024w, https:\/\/archivista.ch\/cms\/wp-content\/uploads\/2024\/06\/etappe0501-768x432.jpg 768w, https:\/\/archivista.ch\/cms\/wp-content\/uploads\/2024\/06\/etappe0501-600x338.jpg 600w, https:\/\/archivista.ch\/cms\/wp-content\/uploads\/2024\/06\/etappe0501-1536x864.jpg 1536w, https:\/\/archivista.ch\/cms\/wp-content\/uploads\/2024\/06\/etappe0501-624x351.jpg 624w\" sizes=\"auto, (max-width: 1920px) 100vw, 1920px\" \/><\/a><\/p>\n<h2>Capt2PDF oder KI: Die B\u00fcchse der Pandorra<\/h2>\n<p>Das hier verwendete <strong><a href=\"https:\/\/www.srf.ch\/news\/wirtschaft\/neue-funktionen-von-apple-iphone-co-werden-mit-vielen-ki-moeglichkeiten-aufgepeppt\">Beispiel der (beinahe) unredigierten Apple-Pressemitteilung, die auf der Hauptseite des Schweizer Fernsehens<\/a><\/strong> landet <strong><a href=\"https:\/\/archivista.ch\/cms\/wp-content\/uploads\/2024\/06\/screen-2024-06-11_092038.pdf\">(Capt2PDF-Kopie hier),<\/a><\/strong> passt gut zur aktuellen KI-Thematik, weil exemplarisch aufgezeigt werden kann, welche Widerspr\u00fcche sich aktuell ergeben. Dass eine Privatperson einen solchen Artikel speichern darf, d\u00fcrfte klar sein. Aber darf ein Betriebssystem die so erstellten Informationen bzw. die daraus gewonnen Informationen in der Cloud speichern?<\/p>\n<p>Wo w\u00e4re die KI, wenn nicht milliardenfach urheberrechtlich gesch\u00fctzte Inhalte f\u00fcr das Trainieren der KI verwendet w\u00fcrde? Wie k\u00f6nnen sich Urheber\/innen dagegen wehren, dass ihre Inhalte durch Dritte verwendet werden? Beim hier vorgestellten Tool Capt2PDF erfolgen alle Arbeiten auf einem lokalen Computer. Was passiert, wenn diese Daten den lokaen Computer verlassen?<\/p>\n<p>Enth\u00e4lt z.B. die hier mit <strong><a href=\"https:\/\/archivista.ch\/cms\/wp-content\/uploads\/2024\/06\/screen-2024-06-11_092038.pdf\">Capt2PDF erstellte Kopie<\/a><\/strong> urheberrechtlich gesch\u00fctzte Inhalte? Was passiert, wenn ein Betriebssystem ungefragt derartige Kopien erstellt und diese \u00f6ffentlich zug\u00e4nglich werden? Passend zum Thema Urheberrecht sei auf <strong><a href=\"https:\/\/www.anwalt.de\/rechtstipps\/urheberschutz-auch-fuer-pressemitteilungen_018468.html\">anwalt.de<\/a><\/strong> bzw. das entsprechend dort zitierte Urteil verwiesen (Zitat):<\/p>\n<p><em>Ein Werk ist generell nur dann urheberrechtlich gesch\u00fctzt, wenn es ein gewisses Ma\u00df an Sch\u00f6pfungsh\u00f6he aufweist &#8211; es darf sich also nicht um etwas Allt\u00e4gliches handeln &#8211; und eine pers\u00f6nlich geistige Leistung beinhaltet. Pressemitteilungen gelten diesbez\u00fcglich als sogenannte \u201ekleine M\u00fcnze\u201c, d. h. als weniger anspruchsvoller Text, der aber gerade noch die unterste Grenze des Urheberrechtsschutzes erreicht (vgl. auch LG Hamburg, Urteil v. 31.01.2007, Az.: 308 O 793\/06).<\/em><\/p>\n<p>Beim hier <strong><a href=\"https:\/\/archivista.ch\/cms\/wp-content\/uploads\/2024\/06\/screen-2024-06-11_092038.pdf\">publizierten (Auszug) des SRF-Artikels<\/a><\/strong> erscheint die Sachlage in diesem Kontext klar. Selbst wenn er die urheberrechtliche Schwelle \u00fcberschreitet, es geht hier um eine Kritik betr. dem Umgang der Medien mit KI bzw. um eine L\u00f6sung mit Capt2PDF, um \u00fcberhaupt aufzeigen zu k\u00f6nnen, was falsch l\u00e4uft bzw. wie es besser gemacht werden kann.<\/p>\n<p>Die B\u00fcchse der Pandorra besteht darin, dass z.B. das Aufzeichnen bzw. das Erstellen von durchsuchbaren Inhalten aktuell f\u00fcr Nutzer\/innen nicht trivial ist. Die Tech-Konerne werden behaupten, genau darum gibt es die KI. Die \u00f6ffentliche Wahrnehmung (gerade auch in den Medien) ist die, ohne KI geht es gar nicht.<\/p>\n<p>Darum sollte bei solchen &#8222;Artikeln&#8220; genau(er) hingesehen werden. Wenn Beitr\u00e4ge nicht mit vollem Namen gekennzeichnet sind, bei Formulierungen wie &#8218;Siri wird noch schlauer&#8216;, es k\u00f6nnte fast der Verdacht aufkommen, die KI w\u00e4re hier am Werk gewesen. Dazu passt, dass die Bilder von GettyImages stammen. Bei der ersten Abbildung wird der Text &#8218;Siri&#8216; mit &#8218;AI&#8216; gemixt (qualitativ definitiv auf KI-Niveau) und bei der zweiten Aufnahme steht: &#8222;<span class=\"media-caption__description\" data-app-image-description=\"\">Im Bild: Apple-Chef Tim Cook<\/span>&#8222;.<\/p>\n<p><a href=\"https:\/\/archivista.ch\/cms\/wp-content\/uploads\/2024\/06\/apple2.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-10396\" src=\"https:\/\/archivista.ch\/cms\/wp-content\/uploads\/2024\/06\/apple2.jpg\" alt=\"\" width=\"1280\" height=\"901\" srcset=\"https:\/\/archivista.ch\/cms\/wp-content\/uploads\/2024\/06\/apple2.jpg 1280w, https:\/\/archivista.ch\/cms\/wp-content\/uploads\/2024\/06\/apple2-300x211.jpg 300w, https:\/\/archivista.ch\/cms\/wp-content\/uploads\/2024\/06\/apple2-1024x721.jpg 1024w, https:\/\/archivista.ch\/cms\/wp-content\/uploads\/2024\/06\/apple2-768x541.jpg 768w, https:\/\/archivista.ch\/cms\/wp-content\/uploads\/2024\/06\/apple2-600x422.jpg 600w, https:\/\/archivista.ch\/cms\/wp-content\/uploads\/2024\/06\/apple2-624x439.jpg 624w\" sizes=\"auto, (max-width: 1280px) 100vw, 1280px\" \/><\/a><\/p>\n<p>Korrekt w\u00e4re wohl, dass der Boss in einem Film auf einem sensationell grossen Display erscheint. Selbst wenn der Beitrag urheberische Qualit\u00e4ten h\u00e4tte, eine (fast) komplette Publikation erscheint hier angebracht, weil damit aufgezeigt werden kann, wie unscharf Informationen im Zusammenhang mit KI gehandhabt werden. Ohne Tools wie Capt2PDF ist es aber recht aufw\u00e4ndig, dies aufzuzeigen.<\/p>\n<p>Nur, wie liegt der Fall, wenn Hersteller von Betriebssytemen mehr oder minder ungefragt die Daten der Nutzer\/innen milliardenfach abkupfern? Dabei darf <strong><a href=\"https:\/\/archivista.ch\/cms\/wp-content\/uploads\/2024\/06\/screen-2024-06-11_092038.pdf\">(passend zur hier publizierten PDF-Datei)<\/a><\/strong> die Frage gestellt werden, was Wahrheit ist? Was, wenn diese Inhalte nicht ganz so sind, wie sie (in der Werbung nicht un\u00fcblich) dargestellt werden? Oder was passiert, wenn die Daten nachtr\u00e4glich ver\u00e4ndert werden?<\/p>\n<p>Beim Apple-Chef findet sich ein am\u00fcsanter Regenbogen mit einer gewissen Aussage. Was, wenn die KI in gewissen Staaten etwas gegen Regenbogen hat? Wird die Cloud-KI mir in diesen Staaten einem &#8222;neutralen&#8220; Wasserstrahl pr\u00e4sentieren? Oder werden unliebsame Informationen gleich in der Echtzeit bei der Anzeige gefiltert?<\/p>\n<p>Welche Chancen haben normale Anwender\/innen heute noch? Gegen\u00fcber den Tech-Konzernen, die ins Innerste des t\u00e4glichen Lebens eindringen, gegen\u00fcber Medien, welche vielleicht auch etwas kritischer berichten d\u00fcrften? Gegen\u00fcber staatlichen Beh\u00f6rden, bei denen es sehr lange geht, bis datenschutz- bzw. wettbewerbsrechtliche Missst\u00e4nde geahndet werden, wenn \u00fcberhaupt.<\/p>\n<p>Open Source, so sie denn lokal zum Einsatz kommt, stellt hier einge gute, die wohl beste, Alternative dar. Die Linux-Distribution AVMultimedia ist genau daf\u00fcr gedacht, Capt2PDF steht hier ab Version 2024\/VI so zur Verf\u00fcgung, das alleine die Nutzer\/innen entscheiden, ob Capt2PDF zum Einsatz kommt oder nicht. Kurz und gut, ein zweckmassiges Programm, um Bildschirminhalte so aufzuzeichnen, dass die B\u00fcchse der Pandorra nicht ge\u00f6ffnet werden muss. Will heissen, ganz ohne KI und Cloud, daf\u00fcr einfach, transparent (100% Open Source) und lokal und in Echtzeit auf dem eigenen Linux-Desktop.<\/p>\n\n\n\n\t<div class=\"dkpdf-button-container\" style=\"            text-align:right \">\n\n\t\t<a class=\"dkpdf-button\" href=\"\/cms\/wp-json\/wp\/v2\/pages\/10380?pdf=10380\" target=\"_blank\"><span class=\"dkpdf-button-icon\"><i class=\"fa fa-file-pdf-o\"><\/i><\/span> PDF Button<\/a>\n\n\t<\/div>\n\n\n\n\n\n","protected":false},"excerpt":{"rendered":"<p>Bildschirmfotos aufzeichnen und PDF-Dateien erstellen Egg, 12. Juni 2024: Allumfassend und \u00fcberall scheint es aktuell um k\u00fcnstliche Intelligenz (KI) zu gehen. Einige Bekanntheit erlangt aktuell Microsoft mit dem neu f\u00fcr Windows 11 angek\u00fcndigten Dienst Recall, der sozusagen das Ged\u00e4chtnis der Nutzer\/innen auf ihrem Computer werden soll. Dabei werden alle x-Sekunden Bildschirmfotos erstellt. Diese Daten werden [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":10635,"menu_order":39,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"footnotes":""},"class_list":["post-10380","page","type-page","status-publish","hentry"],"acf":[],"_links":{"self":[{"href":"https:\/\/archivista.ch\/cms\/wp-json\/wp\/v2\/pages\/10380","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/archivista.ch\/cms\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/archivista.ch\/cms\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/archivista.ch\/cms\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/archivista.ch\/cms\/wp-json\/wp\/v2\/comments?post=10380"}],"version-history":[{"count":25,"href":"https:\/\/archivista.ch\/cms\/wp-json\/wp\/v2\/pages\/10380\/revisions"}],"predecessor-version":[{"id":10437,"href":"https:\/\/archivista.ch\/cms\/wp-json\/wp\/v2\/pages\/10380\/revisions\/10437"}],"up":[{"embeddable":true,"href":"https:\/\/archivista.ch\/cms\/wp-json\/wp\/v2\/pages\/10635"}],"wp:attachment":[{"href":"https:\/\/archivista.ch\/cms\/wp-json\/wp\/v2\/media?parent=10380"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}