0

OCR アルゴリズム (具体的には GOCR アルゴリズム) を 32F429IDISCOVERY ボードに実装しようとしていますが、まだ何も返されません... OV7670 カメラからの画像を RGB565 形式でボードの SDRAM に記録しています。グレースケールになり、アルゴリズム自体に渡されます。このフォーラムや他のフォーラムから、GOCR は非常に優れたアルゴリズムであり、PC ではうまく機能しているように見えましたが、ボード上では機能しないという印象を受けました。OCRまたはGOCRを実装した経験のある人はいますか? 非常に奇妙な方法で動作するため、問題がどこにあるのかわかりません。ほとんどの場合、コードはアルゴリズムの別の部分で停止します...

OCR アルゴリズムの呼び出し:

void ocr_algorithm(char *output_str) {
  job_t job1, *job; /* fixme, dont want global variables for lib */
  job=OCR_JOB=&job1;

  int linecounter;
  const char *line;

  uint8_t r,g,b;
  uint32_t n,i,buffer;
  char *p_pic;

  uint32_t *image = (uint32_t*) SDRAM_START_ADR;

  setvbuf(stdout, (char *) NULL, _IONBF, 0);    /* not buffered */

  job_init(job); /* init cfg and db */

  job_init_image(job); /* single image */

  p_pic = malloc(IMG_ROWS*IMG_COLUMNS);

  // Converting RGB565 to grayscale
  i=0;
  for (n = 0; n < IMG_ROWS*IMG_COLUMNS; n++) {
    if (n % 2 == 0){
        buffer = image[i] & 0xFFFF;
    }
    else{
        buffer = (image[i] >> 16) & 0xFFFF;
        i++;
    }

    r = (uint8_t) ((buffer >> 11) & 0x1F);
    g = (uint8_t) ((buffer >> 5) & 0x3F);
    b = (uint8_t) (buffer & 0x1F);

    // RGB888
    r = ((r * 527) + 23) >> 6;
    g = ((g * 259) + 33) >> 6;
    b = ((b * 527) + 23) >> 6;

    // Greyscale
    p_pic[n] = 0.299*r + 0.587*g + 0.114*b;
  }

  //read_picture;
  job->src.p.p = p_pic;
  job->src.p.x = IMG_ROWS;
  job->src.p.y = IMG_COLUMNS;
  job->src.p.bpp = 1;

  /* call main loop */
  pgm2asc(job);

  //print output
  strcpy(output_str, "");
  linecounter = 0;
  line = getTextLine(&(job->res.linelist), linecounter++);

  while (line) {
    strcat(output_str, line);
    strcat(output_str, "\n");

    line = getTextLine(&(job->res.linelist), linecounter++);
  }

  free_textlines(&(job->res.linelist));

  job_free_image(job);

  free(p_pic);
}
4

0 に答える 0