< >
Home » Farmbot开发入门教程 » farmbot开发入门教程-lua 图片

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()

纠错,疑问,交流: 请进入讨论区点击加入Q群

获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号


标签: none