如何在 ARFrame 捕获图像的屏幕上显示文本识别边界框? (iOS)

问题描述

我已经阅读了 ARKit 官方教程 RealtimeNumberReader,它使用了 AVCaptureSession 和一个特定的函数 layerRectConverted,它仅用于 AVCaptureSession 将坐标从边界框转换为屏幕坐标。

import React,{ createContext,useState } from 'react';

export const MoviesDataContext = createContext();

export default function GlobalMoviesProvider ({children})  {

  const [movie,setMovie] = useState({
    title: 'my test',release_date:'here we are ',rating:'ouh'
  });
  const value = {
    movie,setMovie,}
  return (
      <MoviesDataContext.Provider value={value}>
        {children}
      </MoviesDataContext.Provider>
    );
}
import React,{useContext} from 'react';

import {MoviesDataContext} from './MoviesDataContext';

const ButtonModalUpdater = () => {
    const {movie} = useContext(MoviesDataContext);
    console.log(movie);
    return (
        <h1></h1>
        
        
    );
    
};

export default ButtonModalUpdater;
import React,{createContext,useState} from "react";
import ReactDom from 'react-dom';
import {ButtonModalUpdater} from './ButtonModalUpdater'
import GlobalMoviesProvider from './MoviesDataContext'


function App() {

  const [movies,setMovies] = useState(
    [
      {id:1,title:'comming to america',rating:5,release_date:'2020-12-22'},{id:2,title:'Instant Family',rating:3,release_date:'1995-12-22'},{id:3,title:'The Dig',release_date:'2009-05-24'},{id:4,title:'The Wonder',rating:4,release_date:'2012-07-12'},{id:5,title:'The Rampage',release_date:'2012-10-07'},]
  ); 

  const [directors,setDirectors] = useState(
    [
     {first_name: 'Desiree',family_name: 'Akhavan',address: 'Oneroadstreet New York City'},{first_name: 'Chris',family_name:'John Barfoot',address: 'Somewherein the UK'},{first_name: 'Benjamin Geza',family_name:'Affleck-Boldt',address: 'Berkeley california'},{first_name: 'John',family_name:'Berry',address: 'The Bronx,New York'},{first_name: 'Terence',family_name:'Fisher',address: 'Maid vale,County of London,England'}
    ]
  );


  return (
    <GlobalMoviesProvider>
      <div className="App">
      <h1> Movie data Application</h1>
      <ButtonModalUpdater  />
       </div>
    </GlobalMoviesProvider>
  );

    
    
}

ReactDom.render(React.createElement(App),document.getElementById("root"));

现在我想识别 ARFramecapturedImage 上的文本,然后在屏幕上显示绑定框。可能吗?

我知道如何从官方 tutorial 识别单个图像上的文本,我的问题是如何将规范化的框坐标转换为视口坐标。

请帮忙,非常感谢!!!

解决方法

Try looking at this git repo. 自己弄乱了它,它不是性能最好的,但这应该给你一个开始。

,

根据@Banane42 的回答,我找到了 ARkitVNRecognizeTextRequest 背后的理论

  1. ARKit Sceneview 的 capturedImage 比您看到的更宽。检查下面的图片。我制作了一个小应用,它有一个 imageView 来显示整个图像,背景图像是场景视图区域。
    an image to proof arkit's capturedimage size
  1. 场景视图或图像的坐标起源于top left角,x-axis -> 向右,y-axis -> 底部。但是boundingBox返回的VNRequest的坐标是从bottom left角和x-axis ->向右和y-axis ->到顶部。

  2. 如果你使用request.regionOfInterest,这个ROI应该是相对于整个图像的标准化坐标。返回的 VNRequest boundingBox 是相对于 ROI 框的标准化坐标。

我的应用终于可以正常工作了。这是非常复杂的。所以要小心! enter image description here

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...