farmbot开发入门教程-lua 图片
说明:
- 介绍FarmBot OS 中的图像 Lua 函数列表
拍照()
使用设备相机拍摄照片并将其上传到网络应用。nil成功时返回。如果拍摄失败则返回错误对象
take_photo异步返回错误,这可能会导致开发人员误以为操作已成功,但实际上操作在后台失败。如果您需要对错误进行高级别的控制,或者拍摄的照片超出了 Web 应用允许的限制,请参阅take_photo_raw()
-- Take a photo:
take_photo()
error = take_photo()
if error then
toast("Take photo failed: " .. inspect(error), "error")
else
toast("Take photo succeeded", "success")
end
- 可选参数
争论 建议值 范围
解决 640,480 不一定会产生精确大小或裁剪的图像;相机将使用最接近的可用分辨率。
brightness 35%
89 0% - 100%
0 - 255
contrast 35%
44 0% - 100%
0 - 127
saturation 50%
64 0% - 100%
0 - 127
hue 50%
0 0% - 100%
-15 - 15
- 除分辨率之外的其他参数可以接受百分比或原始值。
-- Take a photo with a specified width and height
take_photo(200, 100)
-- Take a photo with the brightness set to 100%
take_photo({"-s", "brightness=100%"})
-- Take a photo with the saturation set to 70% and the hue set to 3
take_photo({
"-s", "saturation=70%",
"-s", "hue=3"
})
-- Take a photo with a specified width and height and the contrast set to 40%
take_photo(200, 100, {"-s", "contrast=40%"})
- 还可以使用自定义设置或通过farmware_envs端点的API 来设置参数:
{key: "take_photo_width", value: "200"}
{key: "take_photo_height", value: "100"}
{key: "take_photo_args", value: "[\"-s\",\"brightness=100%\"]"}
- take_photo()如果以这种方式设置参数,即使重新启动,FarmBot 也会记住它们,但仍可以通过调用不同的参数逐个覆盖它们
照片网格()
- 每个 FarmBot 都有不同的花园大小和相机视口。photo_grid()返回有关扫描整个花园所需的点网格的元数据对象。它返回具有以下属性的表:
财产 描述
each 每个单元格调用一次的迭代器函数(见下面的示例)。
total 设备的照片网格中包含的单元格数量。
x_grid_points X 轴上花园扫描的长度,以细胞为单位。
y_grid_points Y 轴上花园扫描的长度,以单元格为单位。
x_grid_start_mm 网格中第一个单元格中心的 X 坐标。
y_grid_start_mm 网格中第一个单元格中心的 Y 坐标。
x_offset_mm 相机与 FarmBot 位置的相对 X 偏移。
y_offset_mm 相机与 FarmBot 位置的相对 Y 偏移。
x_spacing_mm X 轴上单元格之间的毫米数。
y_spacing_mm Y 轴上单元格之间的毫米数。
z 相机校准的高度。
- photo_grid()将自动将照片间隔开,使它们有 5 毫米的重叠,以确保扫描整个花园。
-- Get the photo grid metadata:
local grid = photo_grid()
-- Move to each point in the grid and take a photo:
grid.each(function(cell)
move_absolute({x = cell.x, y = cell.y, z = cell.z})
local message = "Taking photo " .. cell.count .. " of " .. grid.total
send_message("info", message)
take_photo()
end)
拍摄照片原始图像()
使用设备相机拍摄照片并将其保存在内存中。这在将照片上传到第三方 API 时非常有用。如果您的用例需要每天拍摄数百或数千张照片,则可以使用take_photo_raw()将图像上传到第三方图像托管提供商,该提供商不会施加与 Web 应用相同的图像托管限制
take_photo_raw()不会将图像上传到 Web 应用程序。您必须手动将生成的图像上传到托管提供商。
-- Take a photo and hold it in memory, encoded in base64:
photo = take_photo_raw()
encoded_photo = base64.encode(photo)
-- Create the request headers and body:
headers = {}
headers["Content-Type"] = "application/json"
headers["Api-Key"] = 123abc
body = {
images = {encoded_photo},
plant_details = {"common_names"}
}
-- Send the request to the Plant.ID API:
response, error = http({
url = "https://api.plant.id/v2/enqueue_identification",
method = "POST",
headers = headers,
body = json.encode(body)
})
可选参数
- 请参阅take_photo()可用的可选参数和示例。所有选项都可以与 一起使用take_photo_raw()
base64.编码()
- 对对象(例如图像)执行base64 编码。适用于将图像上传到第三方 API。也可以反向使用:base64.decode()。
-- Take a photo and hold it in memory:
photo = take_photo_raw()
-- Encode the photo in base64:
encoded_photo = base64.encode(photo)
-- Decode the photo from base64:
decoded_photo = base64.decode(encoded_photo)
校准相机()
执行相机校准。
-- Calibrate the camera:
calibrate_camera()
测量土壤高度()
-- Measure soil height at the current location:
measure_soil_height()
local grid_spacing = 100
-- Move in a grid pattern and measure soil height at each point:
for x = 0, garden_size().x, grid_spacing do
for y = 0, garden_size().y, grid_spacing do
move_absolute(x, y, 0)
measure_soil_height()
end
end
检测杂草()
- 拍摄一张照片并检测图像中的杂草。如果检测到任何杂草,则会在 API 中创建杂草点。
-- Detect weeds:
detect_weeds()
获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号