Хобрук: Ваш путь к мастерству в программировании

API Google выдает ошибку 400, но URL-адрес отображается в порядке

Программа выдает 2 ошибки:

POST https://vision.googleapis.com/v1/images:annotate?key=APIKEY

ИСКЛЮЧЕНИЕ: Ответ со статусом: 400 OK для URL:

Я провел некоторое исследование относительно этой ошибки: если возврат перечисления в порядке для URL-адреса, это означает, что URL-адрес в порядке и возвращает успех.

источник: https://cloud.google.com/vision/docs/reference/rest/v1/Code

Прежде чем я добавлю функцию обрезки, API может работать, однако здесь выдается ошибка. Я не ошибаюсь, если я объявлю 2 класса обслуживания внутри поставщика в app.components.ts?. Логика программы состоит в том, чтобы сделать снимок списка, а затем программа приведет пользователя на страницу обрезки, может обрезать изображение, а затем программа передаст изображение обратно на страницу camera.ts, где оно передаст изображение методу getVision(), который отправит изображение в googleAPI, а console.log() текст внутри изображения. Ниже приведены коды

    @Component({
  templateUrl: 'app.html',

  providers:[CameraService,TestService]


})
export class MyApp {
  rootPage = TabsPage;

  constructor(platform: Platform) {
    platform.ready().then(() => {

      StatusBar.styleDefault();
      Splashscreen.hide();
    });
  }
}

тестирование-service.ts

@Injectable()
export class TestService {

  apiKeys = {
    cloudVision :'ApiKey',

  };

  apiUrls = {
    cloudVision : 'https://vision.googleapis.com/v1/images:annotate?key=',

  };


  visionPostObj = {
    requests : [
      {
        image : {
          content : ''
        },
        features: {
          type: 'TEXT_DETECTION',
          maxResults: 1
        }
      }
    ]
  };

  static get parameters() {
    return [[Http]];
  }



  constructor(private http: Http) {
    console.log('Hello CameraService Provider');

  }




  getVisionLabels( image : string){

    let url = this.apiUrls.cloudVision + this.apiKeys.cloudVision;
    let post = this.visionPostObj;
    post.requests[0].image.content = image;

    return this.http.post(url, post).map( (res) => res.json());
  }

камера.тс

constructor(public navCtrl: NavController, public navParams: NavParams,public testService: TestService,public cameraService: CameraService,public toastCtrl: ToastController) {

  }

    addPhoto(){ 


        this.cameraService.getImage(this.width,this.height,this.quality)
          .subscribe( (data) => {
              this.image = data;
              this.getVision(this.image);
            //console.log(this.image);
            },(error) => {
              // Toast errot and return DEFAULT_PHOTO from Constants
              this.toast(error);
            }
          );
      }

      toast(message: string) {
        let toast = this.toastCtrl.create({
          message: message,
          duration: 2500,
          showCloseButton: false
        });
        toast.present();
      }


      getVision(image64: string) {

      this.testService.getVisionLabels(image64)
        .subscribe((sub) => {

          this.labels = sub.responses[0].textAnnotations;


          this.getText();

        });


    }



    getText() {

      this.labels.forEach((label) => {
        let translation = {search: label.description, result: ''};

            console.log(label.description);

      });
    }
    }

Ответы:


1

Я уже решил проблему. Поскольку строка base64 содержит «data:image/jpeg;base64», что, в свою очередь, вызовет эту ошибку. Следовательно, мне нужно будет удалить это из изображения строки base64.

Ниже приведены коды

addPhoto(){


    this.cameraService.getImage(this.width,this.height,this.quality)
      .subscribe( (data) => {
          this.image = (data);


          this.imageConvert = this.image.replace(/^data:image\/[a-z]+;base64,/, "");

          this.getVision(this.imageConvert);



        },(error) => {
          // Toast errot and return DEFAULT_PHOTO from Constants
          this.toast(error);
        }
      );
  }
12.04.2017
  • Спасибо. Это устранило проблему, с которой я столкнулся. 12.06.2019
  • Новые материалы

    Прогресс в технологии Трансформеров часть 3
    Многомасштабный управляющий сигнальный преобразователь для бесфазного синтеза движения (arXiv) Автор: Линтао Ван , Кун Ху , Лей Бай , Юй Дин , Ваньли Оуян , Чжиюн Ван . Аннотация:..

    Представляем поддержку компонентов Vue.js. Мгновенный HMR и многое другое.
    Хотя у FuseBox уже был плагин Vue, он был базовым и не имел многих функций, которые делали работу с Vue.js такой приятной. Однако с этим выпуском мы рады сообщить, что в FuseBox..

    Приключения в Javascript, часть 1
    Я продолжаю думать о том, чтобы писать больше, но чем больше я думаю об этом, тем меньше я это делаю. Итак, сегодня я перестал думать и начал писать. Отсюда можно только спускаться… В..

    Понимание дженериков в TypeScript: подробное руководство
    Введение TypeScript, строго типизированный надмножество JavaScript, хорошо известен своей способностью улучшать масштабируемость, удобочитаемость и ремонтопригодность приложений. Одной из..

    Учебные заметки JavaScript Object Oriented Labs
    Вот моя седьмая неделя обучения программированию. После ruby ​​и его фреймворка rails я начал изучать самый популярный язык интерфейса — javascript. В отличие от ruby, javascript — это более..

    Разбор строк запроса в vue.js
    Иногда вам нужно получить данные из строк запроса, в этой статье показано, как это сделать. В жизни каждого дизайнера/разработчика наступает момент, когда им необходимо беспрепятственно..

    Предсказание моей следующей любимой книги 📚 Благодаря данным Goodreads и машинному обучению 👨‍💻
    «Если вы не любите читать, значит, вы не нашли нужную книгу». - J.K. Роулинг Эта статья сильно отличается от тех, к которым вы, возможно, привыкли . Мне очень понравилось поработать над..