Các cơ quan quản lý của chính phủ thực hiện một số yêu cầu để đảm bảo rằng tầm nhìn gián tiếp phía sau cung cấp đủ thông tin để điều khiển xe một cách chính xác và kịp thời. Điều này ảnh hưởng đến khả năng nhận biết môi trường xung quanh của người lái xe.
Đối với hệ thống tầm nhìn phía sau dựa trên Hệ thống giám sát bằng camera (CMS), Cơ quan An toàn Giao thông Cao tốc Quốc gia (NHTSA) yêu cầu bạn phải đáp ứng các yêu cầu sau (S6.6.2.3 theo UNECE46):
S5.5.3 Thời gian phản hồi. Hình ảnh từ camera chiếu hậu đáp ứng các yêu cầu của S5.5.1 (Góc nhìn) và S5.5.2 (Kích thước), khi được kiểm tra theo S14.2, sẽ xuất hiện trong vòng 2 giây kể từ khi bắt đầu sự kiện lùi xe.
S5.5.4 Thời gian lưu lại. Hình ảnh từ camera chiếu hậu đáp ứng các yêu cầu của S5.5.1 và S5.5.2 không xuất hiện sau khi sự kiện lùi xe kết thúc.
S5.5.5 Huỷ kích hoạt. Hình ảnh từ camera chiếu hậu đáp ứng các yêu cầu của S5.5.1 và S5.5.2 vẫn xuất hiện trong sự kiện lùi xe cho đến khi người lái xe sửa đổi chế độ xem hoặc bộ chọn hướng di chuyển của xe chuyển từ vị trí lùi xe.
S6.6.2.3.3.5 Cấu phần phần mềm. Sách hướng dẫn của người vận hành phải đề cập đến các hiện tượng có thể xảy ra và tác động của chúng đối với việc che khuất một phần trường nhìn và các vật thể, điều này có thể đòi hỏi người lái xe phải đặc biệt cảnh giác và chú ý.
S6.2.2.3.4.1 Tốc độ khung hình. Chuyển động của các vật thể trước camera sẽ mượt mà và trôi chảy. Tốc độ khung hình tối thiểu của hệ thống là ít nhất 30 Hz (tương đương với 30 khung hình/giây). Trong điều kiện ánh sáng yếu hoặc khi di chuyển ở tốc độ thấp, tốc độ khung hình tối thiểu của hệ thống là ít nhất 15 Hz.
S6.2.2.3.4.2 Thời gian tạo hình ảnh. Thời gian hình thành hình ảnh của màn hình là dưới 55 mili giây ở nhiệt độ 22 độ C ± 5 độ C.
S6.2.2.3.4.3 Độ trễ hệ thống. Hệ thống màn hình camera (CMS) có độ trễ đủ ngắn để hiển thị cảnh vật gần như cùng lúc. Độ trễ thấp hơn 200 mili giây ở nhiệt độ 22 độ C ± 5 độ C.
Chúng tôi đã giới thiệu Hệ thống chế độ xem mở rộng (EVS) của Android Automotive OS (AAOS) để tuân thủ các yêu cầu này trên AAOS cơ bản. Chúng tôi đã giới thiệu một dịch vụ tương tự cho Ảo hoá trên các thiết bị AAOS bằng trình kết xuất có tính sẵn sàng cao (HAR). Dịch vụ này cũng cho thấy sự tuân thủ các yêu cầu này.
Quy trình xem trước camera
5 giai đoạn này tạo nên quy trình xem trước của camera:
Hình 1 Các giai đoạn của quy trình xem trước camera.
Chặn dịch vụ camera đề cập đến nền tảng Dịch vụ camera và lớp trừu tượng của nền tảng này, cho phép các ứng dụng truy cập và sử dụng những camera hiện có. Hàm Display Service (Dịch vụ hiển thị) trực quan hoá dữ liệu hình ảnh cho người dùng. Ứng dụng triển khai hành trình của người dùng mục tiêu bằng Dịch vụ camera và Dịch vụ hiển thị.
Hành trình chính của người dùng khi quan sát phía sau là:
Người lái xe đặt bộ chọn hướng (bánh răng) ở chế độ Đảo chiều để kích hoạt sự kiện lùi xe.
Hệ thống phát sự kiện sao lưu. Ứng dụng nhận thông báo truyền tin và khởi động khối nhập dữ liệu bằng máy ảnh (Dịch vụ camera) và trình kết xuất (Dịch vụ hiển thị).
Khối nhập dữ liệu bằng máy ảnh khởi tạo nền tảng Dịch vụ camera và trả về handle dịch vụ cho ứng dụng.
Trình kết xuất khởi tạo cửa sổ xem cho nhập dữ liệu bằng máy ảnh từ bước 4.
Ứng dụng yêu cầu khối đầu vào camera bắt đầu gửi các bộ đệm khung và sự kiện.
Ứng dụng xếp hàng các vùng đệm khung hình được phân phối thông qua lệnh gọi lại (không đồng bộ). Các khối đầu vào camera sở hữu bộ đệm khung, vì vậy ứng dụng không thể sửa đổi các bộ đệm này.
Ứng dụng loại bỏ một vùng đệm khung hình khỏi hàng đợi (nếu hàng đợi không trống) và tạo thành khung hiển thị cho người dùng. Người dùng có thể sao chép để sửa đổi nội dung.
Ứng dụng gửi một vùng đệm đến trình kết xuất.
Trình kết xuất vẽ nội dung của vùng đệm đã nhận trên màn hình.
Nếu sự kiện sao lưu vẫn đang diễn ra, hãy chuyển sang Bước 7. Khi sự kiện hỗ trợ hoàn tất, ứng dụng sẽ yêu cầu khối nhập dữ liệu bằng máy ảnh ngừng gửi các bộ đệm khung và sự kiện sau khi ẩn khung hiển thị khỏi người dùng.
Ứng dụng có thể đóng camera và giải phóng trình kết xuất.
Hình 1 minh hoạ quy trình này. Hình ảnh này sử dụng các phần tử trong API Thư viện Camera QNX để sử dụng nền tảng Dịch vụ camera.
Hình 2. Hành trình chính của người dùng HAR.
Khối nhập dữ liệu bằng máy ảnh khai báo 3 giao diện:
CameraManager, khai báo các phương thức để quản lý thiết bị camera; ví dụ: ứng dụng dùng giao diện này để mở (dự phòng) một thiết bị camera mục tiêu.CameraDevicekhai báo các phương thức để điều khiển một thiết bị camera; ví dụ: bắt đầu hoặc dừng luồng dữ liệu.CameraStreamListenerkhai báo một phương thức duy nhất để nhận nhiều sự kiện từ một camera mục tiêu.
Thiết kế
Phần này trình bày chi tiết về thiết kế hệ thống.
Trải nghiệm người dùng
Người lái xe có thể xem trước camera sau trên màn hình cụm đồng hồ khi chuyển số sang chế độ lùi. Màn hình sẽ ngừng xem trước camera khi người lái xe chuyển số về số lùi.
Bạn có thể bật các hành trình khác của người dùng. Ví dụ: người lái xe có thể xem trước khu vực không nhìn thấy trong gương khi đèn báo rẽ được kích hoạt.
Bắt đầu chế độ xem trước của camera
Khi sử dụng camera, ứng dụng sẽ liệt kê và đánh giá các camera hiện có để tìm ra camera phù hợp nhất cho mục đích dự kiến. Ví dụ: để có tầm nhìn phía sau, ứng dụng sẽ tìm camera cho thấy phía sau xe trong danh sách các camera hiện có.
Ứng dụng đánh giá điều này bằng cách kiểm tra các đặc điểm của từng camera, chẳng hạn như vị trí, hướng ống kính, tốc độ khung hình, độ phân giải đầu ra và định dạng đầu ra. Nếu nhiều camera có cùng các đặc điểm bắt buộc, ứng dụng có thể kiểm tra các đặc điểm bổ sung, chẳng hạn như trường xem và khoảng cách tiêu cự.
Hình ảnh này cho thấy một trình tự để bắt đầu xem trước bằng camera với cấu hình camera tĩnh:
Hình 3. Bắt đầu xem trước camera với cấu hình camera tĩnh.
Dừng chế độ xem trước của camera
Ứng dụng sẽ ngừng cung cấp tầm nhìn phía sau khi sự kiện lùi xe kết thúc. Để tránh hiển thị màn hình trống hoặc hình ảnh tĩnh, trước tiên, ứng dụng sẽ ẩn khung hiển thị đối với người dùng, sau đó yêu cầu khối đầu vào camera ngừng gửi sự kiện.
Hình ảnh này minh hoạ trình tự dừng luồng dữ liệu từ một thiết bị camera mục tiêu:
Hình 4. Dừng truyền dữ liệu từ thiết bị camera đích.
Lỗi
Thiết bị camera có thể đột ngột ngừng gửi vùng đệm khung hình mới. Để phát hiện những sự cố như vậy, khối đầu vào camera có thể triển khai một bộ hẹn giờ hết hạn khi một khung hình mới đến và gửi thông báo khi bộ hẹn giờ này hết hạn.
Khi nhận được thông báo, ứng dụng sẽ thông báo cho người dùng rằng bản xem trước của camera không còn ở chế độ trực tiếp nữa và cố gắng khôi phục bản xem trước của camera bằng cách đóng thiết bị camera rồi mở lại. Hình 5 cho thấy cách ứng dụng xử lý thời gian chờ:
Hình 5. Xử lý thời gian chờ (luồng dữ liệu bị treo).
Khối đầu vào camera có thể báo cáo các sự cố khác ngoài luồng dữ liệu bị treo và nhúng thêm thông tin chi tiết vào các vùng đệm. OEM có thể sử dụng siêu dữ liệu sự kiện này để xử lý các sự cố trên nền tảng của họ.
Hoạt động
API này được dùng bởi các ứng dụng chạy trên máy chủ và quản lý màn hình cụm công cụ thông qua HAR (các khối màu xanh dương trong sơ đồ bên dưới).
Hình 5 minh hoạ sơ đồ hệ thống:
Hình 6. Sơ đồ hệ thống.
Dịch vụ
Các lệnh gọi API dự kiến sẽ chạy trong bối cảnh của quy trình gọi.
API
API mới này chỉ dành cho những ứng dụng quản lý bản xem trước của camera trên màn hình cụm đồng hồ thông qua HAR. API này có sẵn thông qua lớp trừu tượng nền tảng và liên kết một cách linh động.
Giao diện CameraInputBlock khai báo các phương thức để khởi chạy chức năng camera và nhận trình quản lý khối đầu vào. Ứng dụng dùng một thực thể CameraManager được trả về để quản lý các thiết bị camera.
// This class represents a camera input block for the application that manages the
// instrument cluster display with Harry.
public class CameraInputBlock : public InputBlock {
public:
// Clean up the resources.
virtual ~CameraInputBlock();
// A method inherited from InputBlock class. This method initializes
// CameraInputBlock instance; e.g. checking the platform camera service
// is live.
//
// @return CAMERA_EPERM if the platform camera service is not
// available.
// CAMERA_OK otherwise.
virtual CameraError init() override;
// A method inherited from InputBlock class. This method release all
// resources held by this CameraInputBlock instance.
virtual void release() override;
// This method returns a CameraManager instance. The caller uses
// this instance to manage camera devices.
//
// @param out If this method is successful, this points to a valid
// CameraManager instance.
// @return CAMERA_EACCESS when we fail to create CameraManager instance
// to return.
// CAMERA_OK otherwise.
virtual CameraError getCameraManager(
std::shared_ptr<CameraManager>* out) = 0;
private:
// Handle to manage camera devices.
std::shared_ptr<CameraManager> mMgr;
// Handle to manage camera devices that have been opened by clients.
std::set<CameraDevice> mCameras;
};
Lớp CameraManager khai báo các phương thức để mở (hoặc sở hữu) camera và giải phóng chúng khi ứng dụng hoàn tất việc sử dụng camera đó. Ứng dụng có thể mở nhiều camera và sử dụng các luồng của camera để tạo ra trường nhìn rộng hơn hoặc trải nghiệm nhiều khung hình.
// This pure virtual class declares methods to manage camera devices.
public class CameraManager {
public:
// This method returns a list of CameraDescriptor objects representing
// available cameras.
//
// @param out A list of CameraDescriptor instances. This list may be
// empty if the platform camera service does not list any
// camera.
// @return CAMERA_EACCESS if we failed to build a camera list.
// CAMERA_OK otherwise.
virtual CameraError getCameraList(
std::vector<CameraDescriptor>* out) = 0;
// Open a camera device associated with a given string identifier.
//
// @param ID A string identifier of a camera device to request.
// @param out A pointer to CameraDevice shared pointer object. This
// is null when we fail to open a target device.
// @return CAMERA_ENODEV if no camera is associated with a given id.
// CAMERA_EACCESS if it fails to open a target device.
// CAMERA_OK otherwise.
virtual CameraError open(
std::string ID, std::shared_ptr<CameraDevice>* out) = 0;
// Close a camera device associated with a given string identifier.
// This method is assumed to be always successful.
//
// @param id A string identifier of a camera device to close.
virtual void close(std::string id) = 0;
};
Nếu không phát hiện được camera cần dùng, các ứng dụng có thể chọn camera hoạt động hiệu quả nhất trong bối cảnh đó. CameraManager::getCameraList() trả về một danh sách các thực thể CameraDescriptor, cung cấp các đặc điểm của từng camera.
Lớp CameraDevice biểu thị một thiết bị camera và khai báo các phương thức để bắt đầu và dừng luồng dữ liệu của thiết bị đó. Nếu các đặc điểm của camera không được biết một cách tĩnh, thì các ứng dụng sẽ lấy các đặc điểm đó từ bộ mô tả và phân tích cú pháp.
Ví dụ: một ứng dụng có thể lấy danh sách các cấu hình luồng mà một thiết bị camera mục tiêu cung cấp từ siêu dữ liệu của thiết bị đó và chọn cấu hình có thuộc tính tốt nhất (ví dụ: tốc độ khung hình, độ phân giải và định dạng đầu ra).
// This class represents a single camera device.
public class CameraDevice {
public:
// Start a data stream that attributes are matching to given
// configuration best.
// If a selected configuration is not given (null), a data stream is
// initiated in its default configuration and return.
//
// @param configuration Selected attributes of the imagery data stream.
// @param listener An object to listen to an active data stream.
// @param effective Actual attributes of started data stream.
// @return CAMERA_EINVAL if a listener object is invalid.
// CAMERA_EIO if we failed to start a video stream.
// CAMERA_OK otherwise.
virtual CameraError start(
std::shared_ptr<CameraStreamConfiguration>& configuration,
std::shared_ptr<CameraStreamListener>& listener,
std::shared_ptr<CameraStreamConfiguration>* effective) = 0;
// Stop a data stream.
virtual void stop() = 0;
// Get a camera descriptor.
//
// @param desc A set of attributes that defines this camera device.
// @return CAMERA_ENODATA if a descriptor is not available.
// CAMERA_OK otherwise.
CameraError getDescriptor(std::shared_ptr<CameraDescriptor>* desc) = 0;
// Return a consumed buffer to the camera device. A client of active
// stream must return a frame buffer explicitly by calling this method.
virtual void doneWithFrame(std::shared_ptr<FrameBuffer>& buffer) = 0;
private:
// Describe this camera device.
CameraDescriptor mDescriptor;
// A weak reference to a listening client.
std::weak_ptr<CameraStreamListener> mClient;
};
// This class declares attributes that characterize a camera device.
public class CameraDescriptor {
public:
// Unique std::string object to identify a single camera device.
std::string mId;
// A set of stream configurations this camera device is capable of. A
// camera must have at least one stream configuration.
std::set<CameraStreamConfiguration> mConfigurations;
// Are more attributes needed to exist, such as locations, lens
// facing directions, and intrinsic/extrinsic parameters?
};
// This class declares attributes that characterize an imagery data stream.
public class CameraStreamConfiguration {
public:
// Width of output of this stream in pixels.
unsigned int mWidthInPixels;
// Height of output of this stream in pixels.
unsigned int mHeightInPixels;
// An average number of frames per second.
double mFrameRate;
// A format of this stream's output. A client could calculate a
// byte-per-pixel (bpp) from this.
CameraColorFormat mFormat;
};
// This class represents a listener/callback object to listen to frames and
// events.
public class CameraStreamListener {
public:
// A listener method to receive various stream events including a new
// frame buffer.
//
// @param event CameraStreamEvent object that represents a single event
// such as an arrival of a new frame buffer, camera stream
// is terminated, and so forth.
virtual void onEvent(std::shared_ptr<CameraStreamEvent>* event) = 0;
};
CameraDevice::start() nhận 3 đối số:
Cấu hình luồng phát do người gọi chọn.
Trình nghe để nhận các sự kiện phát trực tiếp.
Con trỏ đến một cấu hình luồng hiệu quả. Bạn thực sự nên kiểm tra giá trị này để xử lý các vùng đệm khung hình sắp tới như dự kiến.
Khi CameraDevice::start() bắt đầu một luồng dữ liệu bằng nền tảng Dịch vụ máy ảnh, luồng này sẽ giữ một tệp tham chiếu yếu đến đối tượng trình nghe của phương thức gọi để phát hiện việc phương thức gọi bị chấm dứt ngoài ý muốn.
Khi hoàn tất với một vùng đệm khung, ứng dụng phải thông báo cho thiết bị camera rằng ứng dụng không cần vùng đệm khung nữa bằng cách gọi phương thức CameraDevice::doneWithFrame().
Khi một luồng bắt đầu, ứng dụng khách sẽ nhận được thông báo về sự kiện. Một thông báo phổ biến là vùng đệm khung hình mới. Thông qua một hàm callback đã đăng ký, ứng dụng sẽ nhận được sự kiện kNewFrameBuffer chứa dữ liệu hình ảnh cùng với siêu dữ liệu bộ đệm khung. StreamEventType khai báo nhiều loại hơn để xử lý các sự kiện khác trên luồng. Chẳng hạn như luồng dữ liệu bị dừng hoặc bị treo.
// This class lists events possibly occurring while a data stream is active.
enum class CameraStreamEventType {
// A delivery of a new frame buffer.
kNewFrameBuffer,
// A data stream has been stopped.
kStreamStopped,
// No new frame buffer arrives for a while.
kStreamHang,
// Add more.
...
};
// This class represents a single instance of StreamEventType.
public class CameraStreamEvent {
public:
// Return a type of this event.
//
// @return CameraStreamEventType enum value.
CameraStreamEventType getType() { return mType; }
// Return a pointer to data associated with this event.
//
// @return A shared pointer object of the buffer that contains data for
// this event.
std::shared_ptr<void> getData() { return mData; }
private:
// Describe a type of this event.
CameraStreamEventType mType;
// A pointer to the data buffer.
std::shared_ptr<void> mData;
};
// This class inherits StreamEvent class and has additional fields to represent
// the frame buffer.
public class FrameBufferEvent : public CameraStreamEvent {
public:
// Return an identifier of this frame buffer.
//
// @return A unique integer value to identify this frame buffer.
int getBufferID() { return mBufferID; }
// Give access to frame buffer metadata.
//
// @return A shared pointer to the buffer that contains data besides
// the imagery data.
std::shared_ptr<void> getMetadata() { return mMetadata; }
private:
// Unique integer to identify this buffer.
int mBufferID;
// A pointer to metadata of this frame buffer.
std::shared_ptr<void> mMetadata;
};
Mẫu này cho thấy cách triển khai giao diện CameraInputBlock và ứng dụng của giao diện đó:
CameraError getCameraManager(std::shared_ptr<CameraManager>* out) {
// During an instantiation, CameraManager will retrieve a list of camera
// devices from the platform camera service and identify their attributes.
*out = std::make_shared<CameraManager>();
return CAMERA_OK;
}
// This method returns a list of CameraDescriptor objects representing available
// cameras.
CameraError CameraManager::getCameraList(std::vector<CameraDescriptor>* out) {
if (mCameraList.size() < 1) {
// Query a list of cameras and get their attributes.
}
*out = mCameraList;
return CAMERA_OK;
}
// Open a camera device associated with a given string identifier.
CameraError CameraManager::open(std::string id, std::shared_ptr<CameraDevice>* out) {
if (!mCameraList.contains(id)) {
// We cannot identify any camera with a given value.
return CAMERA_NODEV;
}
// During a construction, CameraDevice will obtain a handle of a target
// camera device from the platform camera service.
std::shared_ptr<CameraDevice> h = std::make_shared<CameraDevice>(id);
if (!h) {
// We fail to open a camera device.
return CAMERA_EACCESS;
}
*out = h;
return CAMERA_OK;
}
// Close a camera device associated with a given string identifier. This method
// is assumed to be always successful.
void CameraManager::close(std::string id) {
if (!mCameraList.contains(id)) {
// We ignore calls with unknown identifiers.
return;
}
// mCameraList.remove() returns an object removed from the list.
std::shared_ptr<CameraDevice> device = mCameraList.remove(id);
// Ensure a device stops streaming.
device->stop();
}
// Start a data stream that attributes are matching to given configuration
// best.
// If a selected configuration is not given (null), a data stream will be
// initiated in its default configuration and return.
CameraError CameraDevice::start(
std::shared_ptr<CameraStreamConfiguration>& configuration,
std::shared_ptr<CameraStreamListener>& listener,
std::shared_ptr<CameraStreamConfiguration>* effective) {
if (!listener) {
return CAMERA_EINVAL;
}
// selectStreamConfiguration examines this camera's stream configurations
// and returns the one closest to the selected configuration.
CameraStreamConfiguration config = selectStreamConfiguration(configuration);
// mDevice refers to the camera handle for the platform camera service. We
// may need to translate CameraStreamConfiguration for the platform service.
mDevice->configure(
configuration.mWidth, configuration.mHeight, configuration.mFormat);
// Start a data stream with a callback object.
if (!mDevice->startStream(mCallback)) {
// We failed to start a data stream.
return CAMERA_EIO;
}
return CAMERA_OK;
}
// Stop a data stream.
void CameraDevice::stop() {
if (!mDevice) {
// Nothing to do if we don't have a valid camera handle for the
// platform camera service.
return;
}
mDevice->stopStream();
}
// Get a camera descriptor.
CameraError CameraDevice::getDescriptor(std::shared_ptr<CameraDescriptor>* desc) {
if (!mDescriptor) {
return CAMERA_ENODATA;
}
*desc = *mDescriptor;
return CAMERA_OK;
}
// Return a consumed buffer to the camera device. A client of active stream
// must return a frame buffer explicitly by calling this method.
void CameraDevice::doneWithFrame(std::shared_ptr<FrameBuffer>& buffer) {
if (!mBufferRecords.contains(buffer.getId())) {
// Ignore a call with unknown frame buffer.
return;
}
// Simply remove from the record.
(void)mBufferRecords.remove(buffer.getId());
}
// This method handles gear-shift events.
void Application::handleGearShift(GearSelection selection) {
switch (selection) {
case GEAR_SELECTION_REVERSE:
// Upon the reverse gear selection, we are going to start a video
// stream and show its preview on the instrument cluster display.
(void)startStream(mCameraInputBlock);
// FIXME: Exact method to control the camera preview window on the
// instrument display is to be determined.
show(mRearVisibilityWindow);
break;
default:
// Upon all other gear selection, we are going to stop a video
// stream (if it's running) and hide the preview.
stopStream(mCameraInputBlock);
// FIXME: Exact method to control the camera preview window on the
// instrument display is to be determined.
hide(mRearVisibilityWindow);
break;
}
}
bool Application::startStream(std::shared_ptr<CameraInputBlock> handle) {
return handle->start(std::bind(&Application::handleStreamCallback, this);
}
void Application::stopStream(std::shared_ptr<CameraInputBlock> handle) {
handle->stop();
}
// This method handles a stream callback.
void Application::handleStreamCallback(StreamEvent& event) {
switch (event.getType()) {
case StreamEventType::kNewFrameBuffer:
// Handle a new frame buffer. We may just enqueue it for the
// future or forward to CameraInputBlock client.
break;
case StreamEventType::kStreamStopped:
// Handle as an incident if this event is not expected.
break;
// More cases to be added.
}
}
void Application::handleNewFrameBuffer(StreamEvent& event) {
// Enqueue a new frame buffer for the further processing. A buffer
// must be returned explicitly by calling
// CameraDevice.doneWithFrame(FrameBuffer&) method.
}
void Application::handleStreamEvent(StreamEvent& event) {
// Handle a received stream event except a new frame buffer's
// arrival; e.g. a video stream is terminated unexpectedly.
}
Hiệu suất
Tầm nhìn phía sau đáp ứng các quy định của chính phủ.
| Giá trị | Quy định |
|---|---|
| Thời gian trả lời | CFR 571.111 S5.5.3 |
| Tốc độ khung hình | UNECE R46 6.2.2.3.4 |
| Thời gian hình thành hình ảnh | UNECE R46 6.2.2.3.4.2 |
| Độ trễ hệ thống | UNECE R46 6.2.2.3.4.3 |
Quyền riêng tư
Cụ thể về quyền riêng tư:
API này không yêu cầu các hoạt động triển khai thu thập, ghi nhật ký hoặc lưu trữ thông tin nhận dạng cá nhân (PII). Tuy nhiên, vì dữ liệu hình ảnh được chụp (hoặc siêu dữ liệu liên quan) có thể chứa thông tin nhận dạng cá nhân, nên ứng dụng sử dụng API này phải nhận được sự đồng ý rõ ràng của người dùng.
Người dùng không thể điều khiển các thiết bị camera để xem trước trên màn hình cụm công cụ vì camera đóng vai trò quan trọng trong việc đảm bảo an toàn. Các OEM nhận được sự đồng ý của người dùng trong quá trình thiết lập hoặc từ trình điều khiển.
API này không hỗ trợ các ứng dụng camera chạy ở chế độ nền. Do đó, chỉ báo về quyền riêng tư (thông báo cho người dùng rằng một thiết bị camera đang ghi lại dữ liệu) sẽ nằm ngoài phạm vi.