Safie Engineers' Blog!

Safieのエンジニアが書くブログです

Safie APIの始め方と動作方法の紹介

企画部 商品企画 今野です。Safie APIのプロジェクトの企画を担当しています。

Safie APIは現在β版として公開していますが、それを正式版にすることが近々の私の業務目標となっています。私の業務区分は、企画立案・プロジェクトマネージメントですので、バリバリの技術屋の方々に比べるとテックブログを書くには力不足感が正直否めませんが、今回、Safie APIの紹介の場を頂けるとのことで、こうして筆を取らせて頂くことになりました。

本投稿では、Safie APIの概要と簡単な動作お試し方法をご紹介します。よろしくお願いいたします。

Safie APIとは?

Safie APIは、セーフィーが提供するクラウド録画サービスのデータを、外部のサーバから取得したり、情報を書き足したりする機能を提供するものです。詳細な情報を知りたい方は、Safie DevelpersサイトにあるAPIドキュメントを参照ください。大まかには、以下の2つのことができるものと理解して頂ければ、概ね誤りはないかと思います。

  • カメラから動画や静止画、検知したイベント(音や動体検知、など)を取得する
  • 動画にイベント(何かが起こった時間を記録するもの)を登録する

注意頂きたいこととして、Safie APIは外部サーバからの呼び出しを原則としているため、ブラウザから呼び出すことはできないことがあります。ブラウザから呼び出したい場合は、Safie APIの利用プランに含まれているSafie web componentsをご利用ください。

Safie APIを利用するには?

Safie APIの新規利用をご希望の際は、Developerサイトの「お問い合わせ>API導入前のお問い合せ」の項目よりフォームを開いて頂き、項目「API新規利用」を「希望する」にし、他、必要情報を入力の上、送信ください。情報を受けて弊社より案内を差し上げ、手続きが進みます。Safie APIの利用には以下の2つの前提条件がありますので、お問い合わせの際にはご注意ください。

  1. クラウド録画プランを契約すること、既に契約していること

  2. Safie APIを利用するシステムがWebのページを持っていること

1は、Safie APIがカメラ毎に利用許可を管理しているために付いている条件です。利用者の方にカメラのシリアルナンバーを提供頂き、弊社側の管理システムにてそのカメラに権限付与を行います。
2は、認証に必要な情報をAPI利用者側のWebページに向けて送信しなくてはいけない手続きが、認証プロセス中にあるために付いている条件です。利用者の方より用意されたWebページのURIを提供頂き、弊社側の管理システムに事前に登録をします。 それぞれ事前に準備されていると手続きがスムーズに進みます。

手続きが完了すると、認証用のClient IDとClient Secretが記載された通知書が手元に届き、APIが使用できるようになります。

f:id:safie:20211119120316p:plain 図1:Developerサイト お問い合わせ

ここで大変申し訳ないお話をしなければなりません。現在、Safie APIは運用キャパシティの関係で、問い合わせを頂いた全ての方々に提供することができていません。また、法人向け公開に限定しており、個人のお問い合わせはお断りしております。β版が正式版となった際にはより多くの方々にご利用頂けるよう、現在プロジェクトを推進しております。現状はご了承頂ければと思います。

Safie APIを動かしてみる

具体的にどのように動作するのか、私の方で実際に動かしてみた手順を紹介させて頂きます。REST APIですので、呼び出し方は多種多様に可能な訳ですが、あまりこの分野に明るくない方もいらっしゃるかと思います。そのような方にとって、どのようなものなのかの感触を掴む一助になれれば幸いです。動作環境の影響はほぼないかとは思いますが、参考に実際に動作させた環境を以下に記載しておきます。


MacBook Pro (13-inch, M1, 2020)
macOS Monterey version 12.0.1
Google Chrome version 95.0.4638.69 (Official Build) (arm64)
Postman Version 9.0.3 (9.0.3)
https://www.postman.com/
カメラにはトライアル用のSafie APIプランを付与


①カメラ所有者に接続許可をもらう

※今回は許可を出すのは自分自身

最初にカメラ所有者から接続許可をもらう必要があります。以下のURLに指定のQuery Paramsを付与し、カメラ所有者よりカメラ所有者のSafie Viewerのメールアドレス, パスワードを入力してもらいます。 https://openapi.safie.link/v1/auth/authorize

私はPostmanを使用してQuery Paramsを設定することで、Query Paramsを含んだURLを作成しました(図2)。

f:id:safie:20211119134358p:plain 図2:接続許可をもらうURLを生成(Postman) ※client_idとredirect_uriは利用者のものを使用すること

そのURLをコピー&ペーストでGoogle ChromeのURL欄に貼り付けることで、接続許可の画面が表示されます(図3)。 f:id:safie:20211119135119p:plain 図3:接続許可をするための認証画面(Google Chrome)

今回はカメラ所有者が自分なので、自分のSafie Viewerのメールアドレス, パスワードを打ち込みました。カメラ所有者が別の人の場合は、URLを送付し、メールアドレス, パスワードを打ち込んで許可をもらう必要があります。図3の画面にて許可を行うと、redirect_uriで指定した画面に遷移します。遷移した先では、Query ParamsのKey: Codeの文字列が付与されます。以下のように「?code=」の後に16進数の羅列が付与されますので、「?code=」の後から「&status=」の前までの文字列を記録しました。

~~~?code=XXXXXXXXXXXX(16進数の羅列)&status=

②Code情報を使ってTokenを取得する

Postmanに下記URLを入力し、マニュアルに記載された指定の各パラメータを設定します。codeは記録したものを使用しました。 https://openapi.safie.link/v1/auth/token

POSTメソッド、かつ、パラメータもBodyに設定することなど指定が多いので単純にブラウザでは実行できないため、Postman上から実行しています。私はBodyのデータ形式設定を誤り一度詰まりました。正確に「x-www-form-urlencoded」を指定します。

f:id:safie:20211119135357p:plain 図4:Tokenを取得(Postman) ※各パラメータは利用者のものを使用すること

成功するとPostmanのResponseにaccess_tokenが表示されます。ここで、access_tokenの文字列を記録しました。

f:id:safie:20211119135444p:plain 図5: Access token 正常系Response (Postman)

③アクセスできるデバイス一覧を取得する

Tokenを無事に取得できたので、アクセス可能なデバイス一覧を取得します。デバイス一覧取得は特にパラメータ指定はないため、以下URLとToken設定のみを行います。
https://openapi.safie.link/v1/devices

TokenはAuthorizationのタブを選択し、Access Tokenの枠に②で記録した文字列を記入しました。Header Prefixは②のResponseに従いBearerに設定しました。実行するとデバイス一覧がResponseに表示されます。表示された一覧から操作したいデバイスを探し、そのdevice_idの文字列を記録しました。

f:id:safie:20211119135646p:plain 図6:Authorizationの設定(Postman)

④静止画像を撮影してみる

デバイスを操作してみます。今回は静止画撮影を行っています。以下のURLの[device_id]の部分に先ほど記録したdevice_idの文字列を設定しました。 https://openapi.safie.link/v1/devices/[device_id]/image

③の操作同様、Authorizationのタブ下にTokenを設定しました(図7)。実行すると、Responseに撮影した画像が表示されます。実際に、図7のResponseで静止画像が表示されたことを確認できました。

f:id:safie:20211119120250p:plain 図7:静止画の取得(Postman)

最後に

いかがでしたでしょうか。β版では運用キャパシティに限界があり、あまり大々的な広報ができない状況ですが、今回、テックブログということで簡単に紹介をさせて頂きました。紹介が主な内容だったということで、技術者の方にとっては若干物足りなかったかもしれません。今後、弊社技術者より「Safie API使ってXXXしてみた」といったような内容の記事が投稿される予定となっていますので、より技術的な内容を知りたい方は、そちらの記事も是非閲覧頂ければと思います。β版が正式版になった際は、多くの人が利用できる環境を提供でき、情報展開も大きくしていける予定です。どうぞご期待ください。

画像認識技術、サービスの自社利用

セーフィーでCTOをさせて頂いている森本です。

  • なぜ顔認証で勤怠管理をすることに
    • 実際のニーズ
  • 実際にやってみた内容
    • 1. 電子錠のリモート開閉
    • 2.顔認証によるドアの解錠管理
      • 1-1.セーフィー対応カメラによる解錠管理
      • 1-2.タブレットによる解錠管理
      • 1-3.細かなチューニング
    • 3.顔認証による勤怠管理
  • 最後に

久々の投稿となってしまいました。 先日の記事で顔認証で勤怠管理の紹介をしましたが、今回はそのシステムの導入までの道筋も含めて紹介します。

続きを読む

実務未経験者でもAIの仕事ができる?

こんにちは!イメージングシステムグループの二宮です。2020年2月に入社し、画像処理の基礎知識を日々学びながら、機械学習モデルのアルゴリズムを開発したり、デプロイメント方法を検討したりしてAIシステム開発に携わっています。「AIの仕事は実際何をやるの?」や、「実務未経験者でも大丈夫と言われてもどこまで信じればいいのか・・・」などと思われる方も多いと思いますので、入社した経緯と普段の業務の一部を紹介してまいります。

  • 今までの経歴
  • AIの仕事って何をやるの?
    • データ集め
    • アノテーション作業
    • アルゴリズムの調査
    • 実装/実験/評価
    • POC
  • そもそもなぜセーフィーに入社を決めたのか
    • AIをやるにはある程度の余裕が必要
    • 入社を決めるときの私の判断基準
  • 最後に
続きを読む

Safie Viewerのデザイン改善に向けて意識したこと・良かったこと

デザイナーの木下です。2020年5月から主にSafie Viewer[セーフィービューアー(Webアプリケーション)]のユーザーインターフェイスデザインを担当しています。Safie Viewerのカメラ一覧画面の機能追加およびデザイン変更を機に、ユーザーインターフェイスデザインの改善を担当し始めました。

Safie Viewerのカメラ一覧画面の機能追加とデザイン変更にあたり、Safie Viewer全体のデザイン改善に向けて意識したことや良かったことを振り返ってみます。

  • デザインを担当する前の状況と前提
  • 意識したこと
  • それはなぜか
  • プロジェクトを進めるうえで良かったこと
    • 既存の仕様やUIデザインの経緯を知ってから進めることで、段階的な改善を進めやすくなった
    • アップデートを続けやすい共有の仕様書(要件定義書)を用意してから進めた
    • デザインガイドラインに沿って一般的なUIデザインに沿う表現に近づけた
    • 事例:レイアウトを一般的な表現に変えた
      • カメラ一覧画面:デザイン変更前
      • カメラ一覧画面(サムネイル表示):デザイン変更後
      • カメラ一覧画面(リスト表示):新規追加
      • カメラ一覧画面の動き
  • デザインシステムを少しずつ導入
  • 実装後の細かな調整によってUIデザイン品質を高められた
  • 仕様書(要件定義書)に経緯を残した
  • 状況に応じたちょうど良いバランスを意識した
  • UIデザインの視覚的な品質を高めるために
  • 今後改善したいこと
  • さいごに
続きを読む

実務未経験からエンジニアとして入社し1年が経ちました

こんにちは!セーフィー株式会社オペレーションシステム部の大林です。 私は2019年9月に実務未経験からエンジニアとしてセーフィーに入社しました。ちょうど1年が経った頃なので、この1年間でやってきたことや感じてきたことを紹介してみようと思います!

  • まずは自己紹介
  • オペレーションシステム部って?
  • 1ヶ月目
    • Vue.jsとにらめっこ
  • 3ヶ月目
    • 独り立ち!?
    • 辛い時期もあった
  • 5ヶ月目
    • サーバーサイド
  • 6ヶ月目
    • レンタルシステム化PJ
    • Salesforceとの出会い
  • そして今
  • さいごに
続きを読む

Amazon SagemakerでYOLOv4の学習環境を作ってみた

セーフィー株式会社要素技術開発部のおにきです。 クラウドカメラを用いた画像解析の開発を担当しています。

AWSのMLOps環境であるSagemakerについて調査しました。試しに物体検出アルゴリズムであるYOLOv4の学習環境を作ってみたので紹介します。今回学習環境としてYOLOv4の著者Alexey Bochkovskiy氏が公開しているソースコードを利用しています。これはYOLOv3までの著者であるJoseph Redmon氏の開発していたフレームワークであるDarknetをブランチしたものになります。

今回作成したコードはGithubにあげているのでご参照ください。

  • Amazon Sagemaker
    • Sagemakerによる学習
    • 学習の処理の流れ
    • カスタムコンテナの仕様
      • エントリーポイント
      • 入力
      • 出力
  • YOLOv4用にSagemakerでカスタムコンテナを用いた学習環境の作成
    • Step1 エントリーポイントの作成
    • Step2 Dockerfileの作成
    • Step3 ECRの準備
    • Step4 S3に学習データをアップロード
    • Step5 学習の実行
    • 学習結果
  • さいごに
続きを読む

Athenaを活用した問い合わせ対応

初めまして、こんにちは。 セーフィー株式会社 プラットフォーム開発部の大友です。 サーバーサイド周りの開発を担当しています。

今回はユーザーより問い合わせを受け、システム内を調べなければならないとき、サーバーサイドはどのように対応しているのか!その一例を紹介したいと思います。

テーマはログ解析を用いた問い合わせ対応です。

  • Amazon Athena と お問い合わせ
  • Athenaの注意点
  • セーフィーの構成
  • さいごに
続きを読む

セーフィー社内の様子を公開!

こんにちは!セーフィー株式会社サービス開発部 きむらです。 セーフィーのECサイト 構築や、このブログの校正とか色々やっています。

今回は、普段の記事とはちょっと趣向を変えて、セーフィーの社内風景についてご紹介していこうと思います。どんな雰囲気なのか少しでも感じ取ってもらえれば幸いです。

  • クラウドカメラに囲まれた生活
  • ケースその1 ー 顔認証で勤怠管理
  • ケースその2 ー コロナ禍での電話会議
  • ケースその3 ー 備品を勝手に持ち出す社長
  • ケースその4 ー おかしを勝手に持ち出すCTO
  • さいごに
続きを読む

リーダブルコードをプルリクレビュー改善に活用する

こんにちは!セーフィー株式会社のサービス開発部 モバイルチームの北本です。 主にSafie ViewerのiOSアプリの開発を担当しています。

今回は、リーダブルコードを読んで、プルリクレビュー改善に活用する話をしたいと思います。

  • なぜリーダブルコードを読むのか
  • リーダブルコードとは?
  • リーダブルコードに書かれていたこと
    • 理解しやすいコードとは?
    • 表面上の改善(第Ⅰ部)
      • 命名規則について
      • コメントについて
    • ループとロジックの単純化(第Ⅱ部)
      • 関数から早く返す、ネストを浅くする
      • 変数を用いて分割する
      • 変数のスコープと変更
    • コードの再編成(第Ⅲ部)
      • 無関係な下位問題を抽出する
      • 一度にひとつのことを
      • ロジックを明確に説明できるか?
      • 短いコードを書く
  • さいごに
続きを読む

GitHub Actions で小さな不便を解消してみた

セーフィー株式会社 プラットフォーム開発部のソフトウェアエンジニア 斎藤です。 Safie サービスの安定運用に寄与するべく、インフラ周りの構築・運用を主に担当しています。

今回は複数人で開発していると起こりがちの不便さを GitHub Actions を活用し解消したお話です。

  • 例えばこんな不便なことありませんか?
  • 不便をどのように解消したか
    • 概要図
    • 処理フロー
  • 処理の詳細
    • GitHub Actions
    • Python (boto3)
    • 作った環境の自動廃棄
  • 残課題
  • おわりに
続きを読む

© Safie Inc.