diff --git a/nixos/lib/test-driver/Machine.pm b/nixos/lib/test-driver/Machine.pm index 30664406b26d..c619264eb949 100644 --- a/nixos/lib/test-driver/Machine.pm +++ b/nixos/lib/test-driver/Machine.pm @@ -542,16 +542,20 @@ sub getScreenText { $self->nest("performing optical character recognition", sub { my $tmpbase = Cwd::abs_path(".")."/ocr"; my $tmpin = $tmpbase."in.ppm"; - my $tmpout = "$tmpbase.ppm"; $self->sendMonitorCommand("screendump $tmpin"); - system("ppmtopgm $tmpin | pamscale 4 -filter=lanczos > $tmpout") == 0 - or die "cannot scale screenshot"; + + my $magickArgs = "-filter Catrom -density 72 -resample 300 " + . "-contrast -normalize -despeckle -type grayscale " + . "-sharpen 1 -posterize 3 -negate -gamma 100 " + . "-blur 1x65535"; + my $tessArgs = "-c debug_file=/dev/null --psm 11 --oem 2"; + + $text = `convert $magickArgs $tmpin tiff:- | tesseract - - $tessArgs`; + my $status = $? >> 8; unlink $tmpin; - system("tesseract $tmpout $tmpbase") == 0 or die "OCR failed"; - unlink $tmpout; - $text = read_file("$tmpbase.txt"); - unlink "$tmpbase.txt"; + + die "OCR failed with exit code $status" if $status != 0; }); return $text; } diff --git a/nixos/lib/testing.nix b/nixos/lib/testing.nix index d8b5df004df8..58c447c76db6 100644 --- a/nixos/lib/testing.nix +++ b/nixos/lib/testing.nix @@ -93,7 +93,7 @@ rec { vms = map (m: m.config.system.build.vm) (lib.attrValues nodes); - ocrProg = tesseract.override { enableLanguages = [ "eng" ]; }; + ocrProg = tesseract_4.override { enableLanguages = [ "eng" ]; }; # Generate onvenience wrappers for running the test driver # interactively with the specified network, and for starting the @@ -111,7 +111,8 @@ rec { vms=($(for i in ${toString vms}; do echo $i/bin/run-*-vm; done)) wrapProgram $out/bin/nixos-test-driver \ --add-flags "''${vms[*]}" \ - ${lib.optionalString enableOCR "--prefix PATH : '${ocrProg}/bin'"} \ + ${lib.optionalString enableOCR + "--prefix PATH : '${ocrProg}/bin:${imagemagick}/bin'"} \ --run "testScript=\"\$(cat $out/test-script)\"" \ --set testScript '$testScript' \ --set VLANS '${toString vlans}'