同步到Firebase

智能门铃应将拍摄的事件和图像发布到云端,以允许其他客户端连接和显示数据,或进一步分析。

在本课中,您将使用Firebase实时数据库来保留和发布移动随附应用程序所使用的事件。

将Firebase添加到您的项目

为您的项目启用Firebase实时数据库:

  1. Firebase Android SDK 安装到您的应用程序项目中。
  2. Firebase 控制台 中,选择导入Google项目,将您为Cloud Vision创建的Google Cloud项目导入Firebase。
  3. 按照说明中的说明下载并安装 google-services.json 文件。
  4. 将Firebase实时数据库依赖项添加到应用级 build.gradle 文件中:

    dependencies {
        ...
    
        compile 'com.google.firebase:firebase-core:9.6.1'
        compile 'com.google.firebase:firebase-database:9.6.1'
    }
    

    配置数据库规则

    您需要指定谁可以读写您的Firebase实时数据库。要配置Firebase数据库访问规则:

    1. Firebase 控制台 中,在项目的页面上,单击 Database (数据库)。
    2. 单击 Rules,并更新数据库规则以允许公开的读/写访问:

      {
        "rules": {
          ".read": true,
          ".write": true
        }
      }
      
    3. 单击 Publish

    有关设置数据库规则的更多信息,请参阅 数据库规则入门

    将捕获的数据写入数据库

    在每个门铃事件时,应用程序会捕获以下数据并将其存储在Firebase中:

    • 相机图像数据
    • 事件时间戳
    • Cloud Vision注释

    以下JSON模式描述了每个事件在Firebase中如何组织数据:

    <doorbell-entry> {
        "image": <Base64 image data>,
        "timestamp": <event timestamp>,
        "annotations": {
            <label>: <score>,
            <label>: <score>,
            ...
        }
    }
    

    将捕获的数据写入Firebase数据库:

    1. 使用 FirebaseDatabase.getInstance() 初始化数据库实例:

      import com.google.firebase.database.FirebaseDatabase;
      ...
      
      public class DoorbellActivity extends Activity {
          ...
      
          private FirebaseDatabase mDatabase;
      
          @Override
          protected void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              ...
      
              mDatabase = FirebaseDatabase.getInstance();
          }
      }
      
    2. 将捕获的图像数据,时间戳和Cloud Vision注释写入数据库中的新的 DatabaseReference

      import com.google.firebase.database.DatabaseReference;
      import com.google.firebase.database.FirebaseDatabase;
      import com.google.firebase.database.ServerValue;
      ...
      
      public class DoorbellActivity extends Activity {
          ...
      
          private FirebaseDatabase mDatabase;
      
          private void onPictureTaken(byte[] imageBytes) {
              if (imageBytes != null) {
                  try {
                      // Process the image using Cloud Vision
                      Map<String, Float> annotations = annotateImage(imageBytes);
      
                      // Write the contents to Firebase
                      final DatabaseReference log = mDatabase.getReference("logs").push();
                      log.child("timestamp").setValue(ServerValue.TIMESTAMP);
      
                      // Save image data Base64 encoded
                      String encoded = Base64.encodeToString(imageBytes,
                              Base64.NO_WRAP | Base64.URL_SAFE);
                      log.child("image").setValue(encoded);
      
                      if (annotations != null) {
                          log.child("annotations").setValue(annotations);
                      }
                  } catch (IOException e) {
                      Log.w(TAG, "Unable to annotate image", e);
                  }
              }
          }
      }
      

      </li> </ol>

      您的应用程序现在将每个捕获的图像和相关的图像分析写入Firebase数据库!

      验证同步数据

      Firebase会自动将本地数据库的更改与云进行同步。要验证您的应用程序写入的数据是否已同步:

      1. Firebase 控制台 中,在项目的页面上,单击 Database
      2. 单击 Data
      3. 观察到在“日志”节点下创建了一个新条目。
      4. </ol>

        results matching ""

          No results matching ""