同步到Firebase
智能门铃应将拍摄的事件和图像发布到云端,以允许其他客户端连接和显示数据,或进一步分析。
在本课中,您将使用Firebase实时数据库来保留和发布移动随附应用程序所使用的事件。
将Firebase添加到您的项目
为您的项目启用Firebase实时数据库:
google-services.json
文件。将Firebase实时数据库依赖项添加到应用级 build.gradle
文件中:
dependencies {
...
compile 'com.google.firebase:firebase-core:9.6.1'
compile 'com.google.firebase:firebase-database:9.6.1'
}
配置数据库规则
您需要指定谁可以读写您的Firebase实时数据库。要配置Firebase数据库访问规则:
- 在 Firebase 控制台 中,在项目的页面上,单击 Database (数据库)。
-
单击 Rules,并更新数据库规则以允许公开的读/写访问:
{ "rules": { ".read": true, ".write": true } }
-
单击 Publish。
有关设置数据库规则的更多信息,请参阅 数据库规则入门。
将捕获的数据写入数据库
在每个门铃事件时,应用程序会捕获以下数据并将其存储在Firebase中:
- 相机图像数据
- 事件时间戳
- Cloud Vision注释
以下JSON模式描述了每个事件在Firebase中如何组织数据:
<doorbell-entry> {
"image": <Base64 image data>,
"timestamp": <event timestamp>,
"annotations": {
<label>: <score>,
<label>: <score>,
...
}
}
将捕获的数据写入Firebase数据库:
使用 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();
}
}
将捕获的图像数据,时间戳和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会自动将本地数据库的更改与云进行同步。要验证您的应用程序写入的数据是否已同步: