HAR kamera görünümü

Devlet düzenleyicileri, dolaylı arka görüşün aracı hassas ve zamanında manevra yapmaya yetecek kadar bilgi sağlamasını sağlamak için çeşitli şartlar uygular. Bu durum, sürücünün çevresindeki farkındalığını etkiler.

Kamera İzleme Sistemi'ne (CMS) dayalı arka görüş sistemleri için National Highway Traffic Safety Administration (Ulusal Karayolu Trafik Güvenliği Dairesi) (NHTSA), şu şartları karşılamanızı zorunlu kılar (UNECE46'dan alınan S6.6.2.3):

  • S5.5.3 Yanıt süresi. S14.2 uyarınca test edildiğinde S5.5.1 (Görüş alanı) ve S5.5.2 (Boyut) şartlarını karşılayan arka görünüm görüntüsü, geri gitme etkinliğinin başlamasından sonraki 2, 0 saniye içinde gösterilir.

  • S5.5.4 Bekleme süresi. S5.5.1 ve S5.5.2 şartlarını karşılayan arka görünüm resmi, destekleme etkinliği sona erdikten sonra gösterilmiyor.

  • S5.5.5 Devre Dışı Bırakma. S5.5.1 ve S5.5.2 şartlarını karşılayan arka görünüm görüntüsü, sürücü görünümü değiştirene veya araç yönü seçici geri konumundan çıkana kadar geri gitme etkinliği sırasında görünür kalır.

  • S6.6.2.3.3.5 Yapılar. Kullanım kılavuzunda, olası yapaylıklar ve bunların görüş alanının ve nesnelerin kısmi olarak kapanması üzerindeki etkileri açıklanmalıdır. Bu durum, sürücünün özellikle dikkatli ve uyanık olmasını gerektirebilir.

  • S6.2.2.3.4.1 Kare hızı. Kameranın önündeki nesnelerin hareketleri düzgün ve akıcı şekilde işlenir. Sistemin minimum kare hızı en az 30 Hz (30 FPS'ye eşdeğer) olmalıdır. Zayıf ışık koşullarında veya düşük hızda manevra yaparken sistemin minimum kare hızı en az 15 Hz'dir.

  • S6.2.2.3.4.2 Görüntü oluşturma süresi. Monitörün görüntü oluşturma süresi, 22 santigrat derece ± 5 santigrat derece sıcaklıkta 55 ms'den azdır.

  • S6.2.2.3.4.3 Sistem gecikmesi. Kamera izleme sistemi (CMS), manzarayı neredeyse aynı anda oluşturacak kadar kısa bir gecikmeye sahiptir. Gecikme, 22 santigrat derece ±5 santigrat derece sıcaklıkta 200 ms'den düşüktür.

Bu şartlara uygun olarak, çıplak metal AAOS'te Android Automotive OS (AAOS) Genişletilmiş Görünüm Sistemi (EVS)'ni kullanıma sunduk. Yüksek kullanılabilirlik oluşturucuya (HAR) sahip AAOS cihazlarda sanallaştırma için benzer bir hizmet kullanıma sunduk. Bu hizmet de söz konusu koşullara uygunluğu gösterir.

Kamera önizleme ardışık düzeni

Bu beş aşama, kamera önizleme işlem hattını oluşturur:

Kamera önizleme ardışık düzen aşamaları

Şekil 1. Kamera önizleme ardışık düzen aşamaları.

Kamera hizmeti bloğu, Kamera Hizmeti platformunu ve uygulamaların mevcut kameralara erişip bunları kullanmasına olanak tanıyan soyutlama katmanını ifade eder. Görüntüleme Hizmeti işlevi, görüntü verilerini kullanıcılar için görselleştirir. Uygulama, hedef kullanıcı yolculuklarını Kamera Hizmeti ve Görüntüleme Hizmeti ile uygular.

Birincil arka görünürlük kullanıcı yolculuğu şöyledir:

  1. Sürücü, geri gitme etkinliğini tetiklemek için yön seçiciyi (vites) geri vitese alır.

  2. Sistem, destekleyici etkinliği yayınlar. Uygulama yayını alır ve kamera giriş bloğunu (Kamera Hizmeti) ve oluşturucuyu (Ekran Hizmeti) başlatır.

  3. Kamera girişi bloğu, Kamera Hizmeti platformunu başlatır ve hizmet tutamacını uygulamaya döndürür.

  4. Oluşturucu, 4. adımdaki kamera girişi için görünüm penceresini başlatır.

  5. Uygulama, çerçeve arabelleklerini ve etkinlikleri göndermeye başlamak için kamera girişi bloğunu ister.

  6. Uygulama, geri çağırmalar aracılığıyla (eşzamansız) teslim edilen çerçeve arabelleklerini sıraya alır. Çerçeve arabellekleri kamera girişi bloğuna ait olduğundan uygulama bunları değiştiremez.

  7. Uygulama, bir çerçeve arabelleğini kuyruktan çıkarır (kuyruk boş değilse) ve kullanıcı görünümünü oluşturur. Kullanıcılar, içerikleri değiştirmek için kopya oluşturabilir.

  8. Uygulama, oluşturucuya bir arabellek gönderir.

  9. Oluşturucu, alınan arabelleğin içeriğini ekranda çizer.

  10. Destekleme etkinliği devam ediyorsa 7. adıma geçin. Destekleme etkinliği tamamlandığında uygulama, görünümü kullanıcıdan gizledikten sonra kamera girişi bloğunun kare arabelleklerini ve etkinlikleri göndermeyi durdurmasını ister.

  11. Uygulama, isteğe bağlı olarak bir kamerayı kapatır ve oluşturucuyu serbest bırakır.

Şekil 1'de akış gösterilmektedir. Bu resimde, Kamera Hizmeti platformunu kullanmak için QNX Camera Library API'sinden öğeler kullanılıyor.

HAR birincil kullanıcı yolculuğu

Şekil 2. HAR birincil kullanıcı yolculuğu.

Kamera girişi bloğu üç arayüz bildirir:

  • CameraManager, kamera cihazlarını yönetmek için yöntemler bildirir. Örneğin, uygulama hedef kamera cihazını açmak (ayırmak) için bu arayüzü kullanır.

  • CameraDevice, kamera cihazını kontrol etme yöntemlerini (ör. veri akışını başlatma veya durdurma) bildirir.

  • CameraStreamListener, hedef kameradan çeşitli etkinlikler almak için tek bir yöntem bildirir.

Tasarım

Bu bölümde sistem tasarımı ayrıntılı olarak açıklanmaktadır.

Kullanıcı deneyimi

Sürücü, vitesi geri vitese aldığında gösterge paneli ekranında arka kamerayı önizleyebilir. Sürücü vitesi geri vitesten çıkardığında ekranda kamera önizlemesi durur.

Ek kullanıcı yolculukları etkinleştirilebilir. Örneğin, sürücü sinyal verildiğinde aynalarda görünmeyen alanı önizleyebilir.

Kamera önizlemesini başlatma

Uygulama, kameraları kullanırken amaçlanan kullanım için en iyi kamerayı bulmak üzere mevcut kameraları numaralandırır ve değerlendirir. Örneğin, arka görüş için uygulama, mevcut kameralar listesinde aracın arka tarafını gösteren kamerayı arar.

Uygulama, her kameranın özelliklerini (ör. konum, lensin yönü, kare hızı, çıkış çözünürlüğü ve çıkış biçimi) inceleyerek bu değerlendirmeyi yapar. Birden fazla kamera aynı gerekli özelliklere sahipse uygulama, görüş alanı ve odak uzaklığı gibi ek özellikleri inceleyebilir.

Bu resimde, statik kamera yapılandırmasıyla kamera önizlemesi başlatma sırası gösterilmektedir:

Statik kamera yapılandırmasıyla kamera önizlemesini başlatma

Şekil 3. Statik kamera yapılandırmasıyla kamera önizlemesini başlatın.

Kamera önizlemesini durdurma

Geri gitme etkinliği sona erdiğinde uygulama, arka görünürlük sağlamayı durdurur. Uygulama, boş ekran veya hareketsiz görüntü göstermemek için önce görünümü kullanıcıdan gizler, ardından kamera girişi bloğunun etkinlik göndermeyi durdurmasını ister.

Bu resimde, hedef kamera cihazından gelen bir veri akışını durdurma sırası gösterilmektedir:

Hedef kamera cihazından gelen veri akışını durdurma

Şekil 4. Hedef kamera cihazından gelen veri akışını durdurun.

Hatalar

Kamera cihazı, yeni bir çerçeve arabelleği göndermeyi beklenmedik bir şekilde durdurabilir. Bu tür olayları algılamak için kamera girişi bloğu, yeni bir karenin gelmesiyle süresi dolan bir zamanlayıcı uygulayabilir ve bu zamanlayıcının süresi dolduğunda bildirim gönderebilir.

Uygulama bir bildirim aldığında kullanıcıya kamera önizlemesinin artık canlı olmadığını bildirir ve kamera cihazını kapatıp tekrar açarak kamera önizlemesini geri yüklemeye çalışır. Şekil 5'te, uygulamanın zaman aşımını nasıl işlediği gösterilmektedir:

Zaman aşımını işleme

Şekil 5. Zaman aşımını işleme (veri akışının askıda kalması).

Kamera girişi bloğu, asılı kalan veri akışı dışındaki olayları bildirebilir ve arabelleklere daha fazla ayrıntı yerleştirebilir. OEM'ler, platformlarındaki olayları yönetmek için bu etkinlik meta verilerini kullanabilir.

Etkinlikler

API, ana makinede çalışan ve HAR (aşağıdaki şemada mavi bloklar) aracılığıyla gösterge paneli ekranını yöneten uygulamalar tarafından kullanılır.

Şekil 5'te bir sistem şeması gösterilmektedir:

Sistem diyagramı

Şekil 6. Sistem diyagramı.

Hizmetler

API çağrılarının, çağıran işlem bağlamında çalışması beklenir.

API'ler

Yeni API yalnızca HAR aracılığıyla gösterge paneli ekranındaki kamera önizlemelerini yöneten uygulamalar için tasarlanmıştır. API, platform soyutlama katmanı aracılığıyla kullanılabilir ve dinamik olarak bağlanır.

CameraInputBlock arayüzü, kamera işlevini başlatma ve giriş blok yöneticisini alma yöntemlerini bildirir. Uygulama, kamera cihazlarını yönetmek için döndürülen bir CameraManager örneğini kullanır.

// 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;
};

CameraManager sınıfı, kameraları açmak (veya sahiplenmek) için yöntemler bildirir ve uygulama bu kamerayla işini bitirdiğinde kameraları serbest bırakır. Uygulama, birden fazla Kamera açabilir ve daha geniş bir görüş alanı veya çoklu izleme deneyimi oluşturmak için bu kameraların yayınlarını kullanabilir.

// 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;
};

Uygulamalar hangi kameraların kullanılacağını algılayamıyorsa bağlamda en iyi çalışan kamerayı seçebilir. CameraManager::getCameraList(), her bir kameranın özelliklerini sağlayan bir CameraManager::getCameraList() örnek listesi döndürür.CameraDescriptor

CameraDevice sınıfı, tek bir kamera cihazını temsil eder ve veri akışını başlatıp durdurmak için yöntemler bildirir. Kamera özellikleri statik olarak bilinmiyorsa istemciler bunları tanımlayıcılarından alır ve ayrıştırır.

Örneğin, bir istemci, hedef kamera cihazının meta verilerinden sunduğu akış yapılandırmalarının listesini alabilir ve en iyi özelliklere (ör. kare hızları, çözünürlükler ve çıkış biçimi) sahip olanı seçebilir.

// 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() işlevi üç bağımsız değişken alır:

  • Arayan tarafından seçilen yayın yapılandırması.

  • Akış etkinliklerini almak için kullanılan dinleyici.

  • Etkili bir akış yapılandırmasına işaretçi. Arayanın, gelen çerçeve arabelleklerini amaçlandığı gibi işlemek için bu değeri incelemesini önemle tavsiye ederiz.

CameraDevice::start(), Camera Service platformuyla bir veri akışı başlattığında arayanın beklenmedik şekilde sonlandırılmasını algılamak için arayanın dinleyici nesnesine zayıf bir referans tutar.

Bir istemci, çerçeve arabelleğini kullandığında CameraDevice::doneWithFrame() yöntemini çağırarak kamera cihazına artık çerçeve arabelleğine ihtiyacı olmadığını bildirmelidir.

Bir yayın başladığında istemci, etkinlik mesajları alır. Sık karşılaşılan bir mesaj, yeni bir çerçeve arabelleğidir. Bir istemci, kayıtlı bir geri çağırma işlevi aracılığıyla, çerçeve arabellek meta verileriyle birlikte görüntü verilerini içeren bir kNewFrameBuffer etkinliği alır. StreamEventType, diğer akış etkinliklerini işlemek için daha fazla tür bildirir. Örneğin, durdurulmuş veya askıda kalmış veri akışı.

// 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;
};

Bu örnekte, CameraInputBlock arayüzünün ve uygulamasının bir uygulaması gösterilmektedir:

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.
}

Performans

Arka görünürlük, bu yasal düzenlemelere uygundur.

Değer Tüzük
Yanıt süresi CFR 571.111 S5.5.3
Kare hızı UNECE R46 6.2.2.3.4
Görüntü oluşturma süresi UNECE R46 6.2.2.3.4.2
Sistem gecikmesi UNECE R46 6.2.2.3.4.3

Gizlilik

Gizlilikle ilgili olarak:

  • API, uygulamaların kimliği tanımlayabilecek bilgileri (PII) toplaması, günlüğe kaydetmesi veya depolaması için gerekli değildir. Ancak, yakalanan görüntü verileri (veya ilişkili meta veriler) kimliği tanımlayabilecek bilgiler içerebileceğinden, API'yi kullanan uygulamanın kullanıcının açık iznini alması gerekir.

  • Kameralar güvenlikle ilgili kritik rollerde yer aldığından kullanıcılar, gösterge paneli ekranında önizleme yapmak için kamera cihazlarını kontrol edemez. OEM'ler, kurulum sırasında veya sürücüden kullanıcı izni alır.

  • Bu API, arka plan kamera istemcilerini desteklemez. Bu nedenle, kullanıcıları bir kamera cihazının veri yakaladığı konusunda bilgilendiren gizlilik göstergesi kapsam dışındadır.