Проблемы с переменными (this.x) в react native - PullRequest
1 голос
/ 26 мая 2020

Я следую этому руководству , чтобы попытаться заставить тензорный поток js работать в собственном реагировании.

Код учебника следующий (работает, протестирован путем клонирования репозитория):

class App extends React.Component {
  state = {
    isTfReady: false,
    isModelReady: false,
    predictions: null,
    image: null
  }

  async componentDidMount() {
    await tf.ready()
    this.setState({
      isTfReady: true
    })
    this.model = await mobilenet.load()
    this.setState({ isModelReady: true })
    this.getPermissionAsync()
  } 

Пока мой код:

const modelJson = require('../assets/model/model.json');
const modelWeights = require('../assets/model/group1-shard1of1.bin');

class CameraCompo extends Component {
  async componentDidMount(){
    this.model = await tf.loadGraphModel(bundleResourceIO(modelJson, modelWeights));
  }

Выдает ошибку: Свойство 'model' не существует для типа 'CameraCompo'

Я пробовал добавить this.model в конструктор, как показано ниже:

  constructor(props){
    super(props)
    this.model = tf.GraphModel
  }

Но тогда он просто дает мне то же самое ошибка.

Любая помощь будет принята с благодарностью.

1 Ответ

1 голос
/ 26 мая 2020

Typescript жалуется, что model не является свойством компонента.

Интерфейс может быть определен для свойств и состояния для машинописного текста, чтобы вывести их по ходу дела. В противном случае их можно просто установить в любое значение, которое противоречит цели использования машинописного текста

inferface Props {
 // add what is necessary
}

interface State {
   model: any
}

class CameraCompo extends Component<Props, State> {
  async componentDidMount(){

  const model = await tf.loadGraphModel(bundleResourceIO(modelJson, modelWeights));
  this.setState(model)
  // later model can be accessed with this.state.model.predict(input)
  }
}

. Вышеупомянутое было бы для определения модели и установки ее в состоянии компонента. Но модель практически не меняется и, возможно, нет необходимости держать ее в состоянии компонента. В этом случае модель просто нужно указать

class CameraCompo extends Component {
      private model: any
      async componentDidMount(){
         this.model = await tf.loadGraphModel(bundleResourceIO(modelJson, modelWeights));
      }
}
...