AXIS Speed Monitor

Informacje o aplikacjach

Aplikacja AXIS Speed Monitor wizualizuje prędkość pojazdów znajdujących się w strefie detekcji radaru podczas wyświetlania widoku z kamery na żywo oraz zapisuje informacje radaru na karcie SD w celu sporządzania statystyk. Aplikacja wymaga kamery Axis i radaru Axis lub tylko radaru Axis. Listę kompatybilnych kamer Axis można znaleźć na stronie axis.com/products/axis-speed-monitor#compatible-products.

Aplikacji można używać w samodzielnych instalacjach radaru, tzn. bez kamery, na przykład gdy istnieją obawy o prywatność danych lub trzeba zbierać tylko informacje statystyczne. Wtedy informacje o prędkości będą wizualizowane w widoku na żywo z radaru.

Radar, lub kamerę z syntezą radaru i wideo, należy zamontować i skonfigurować zgodnie z instrukcjami instalacji i obsługi. Więcej informacji można znaleźć w dokumentacji użytkownika urządzenia:

Uwaga

Aby można było rejestrować statystyki, należy włożyć kartę SD to urządzenia, na którym jest zainstalowana aplikacja.

Rozpocznij

Kalibracja radaru

Po zainstalowaniu radaru domyślny widok podglądu na żywo z radaru będzie przedstawiał zasięg radaru i wykryty ruch; można też od razu dodać strefy i reguły detekcji. Przed ustanowieniem połączenia z radarem i skonfigurowaniem nakładek aplikacji należy skalibrować radar pod kątem sceny.

Sprawdzić, czy wysokość montażu radaru odpowiada wysokości ustawionej w interfejsie WWW radaru. Jeżeli radar jest zamontowany na innej wysokości, należy go skalibrować, aby skompensować wysokość mocowania.

W celu skalibrowania radaru:

  1. Zaloguj się do interfejsu WWW radaru.

  2. Przejdź do menu Radar > Settings > General (Radar > Ustawienia > Ogólne).

  3. Wprowadź wysokość montażową.

  4. W menu Radar > Settings > Detection (Radar > Ustawienia > Detekcja) włącz Ignore swaying objects (Ignoruj kołyszące się obiekty), aby wykluczyć ze scenariuszy krzaki, drzewa i znaki drogowe. Pilnuj, aby znaki drogowe nie znajdowały się tuż przed radarem.

Uwaga

Jeżeli na przykład chcesz tylko zbierać dane statystyczne o pojazdach, wybierz kolejno opcje Radar > Scenarios (Radar > Scenariusze) i utwórz scenariusz. Wprowadź treść scenariusza, a następnie w obszarze Trigger on object type (Wyzwalanie według typu obiektu) wyczyść pole wyboru Human (Człowiek).

Kalibracja mapy

Przykład mapy referencyjnej w radarze AXIS D2110-VE Security Radar.

Aby łatwiej sprawdzić, w którą stronę poruszają się obiekty, można wczytać mapę referencyjną, na przykład mapę terenu lub zdjęcie z lotu ptaka, które pokazuje obszar pokryty radarem.

  • Wymogi dotyczące obrazów:
  • Obsługiwane formaty to JPEG i PNG.

  • Obraz można przycinać w radarze.

  • Orientacja nie jest ważna, ponieważ kształt obszaru objętego radarem zostanie podczas kalibracji przesunięty tak, aby dopasować się do obrazu.

Przejdź do menu Radar > Map calibration (Radar > Kalibracja mapy), aby przesłać mapę referencyjną. Następnie postępuj zgodnie z instrukcjami konfiguracji, aby ją skalibrować.

Więcej informacji na temat ustawień w interfejsie WWW radaru: axis.com.

Wybór profilu radaru

Radar Axis może służyć do monitorowania obszaru lub drogi. Dla tych scenariuszy dostępne są dwa zoptymalizowane profile:

  • Area monitoring profile (Profil monitorowania obszaru): do śledzenia osób, pojazdów i nieznanych obiektów poruszających się z małą prędkością.

  • Road monitoring profile (Profil monitorowania drogi): głównie do śledzenia pojazdów poruszających się z większą prędkością.

Aby wybrać profil, w interfejsie WWW radaru przejdź do menu Radar > Settings > Detection (Radar > Ustawienia > Detekcja).

Informacje na temat zasięgu detekcji oraz przykłady instalacji i zastosowań można znaleźć w instrukcjach obsługi poszczególnych urządzeń:

Dodawanie scenariuszy

Dodaj scenariusze, aby zdefiniować warunki wyzwalania i ustawienia wykrywania w radarze. Scenariusze zostaną zaimportowane do usługi AXIS Speed Monitor.

  1. Aby dodać scenariusz:
  2. W interfejsie WWW radaru przejdź do Radar > Scenarios (Radar > Scenariusze).

  3. Kliknij Add scenario (Dodaj scenariusz).

  4. Wpisz nazwę scenariusza.

  5. Pozwala wybrać, czy warunkiem wyzwalania mają być obiekty przemieszczające się w obszarze lub przekraczające jedną albo dwie linie.

  1. Aby wyzwalać zdarzenia przez ruchome obiekty w obszarze:
  2. Wybierz Movement in area (Ruch w obszarze).

  3. Kliknij przycisk Dalej.

  4. Wybierz typ strefy, którą chcesz uwzględnić w scenariuszu.

    Użyj myszki, aby zmienić kształt i położenie strefy, tak aby obejmowała tylko pożądaną część obrazu radaru lub mapy referencyjnej.

  5. Kliknij przycisk Dalej.

  6. Dodaj ustawienia detekcji.

    1. W obszarze Ignore short-lived objects (Ignorowanie obiektów krótkotrwałych) dodaj sekundy, które muszą następnie upłynąć do wyzwolenia.

    2. Wybierz typ wyzwalającego obiektu w obszarze Trigger on object type (Typ wyzwalającego obiektu).

    3. Dodaj zakres ograniczenia prędkości w obszarze Speed limit (Ograniczenie prędkości).

  7. Kliknij przycisk Dalej.

  8. Ustaw minimalny czas trwania alarmu w obszarze Minimum trigger duration (Minimalny czas alarmu).

  9. Kliknij przycisk Zapisz.

  1. Wyzwalanie przez obiekty przekraczające linię:
  2. Wybierz Line crossing (Przekroczenie linii).

  3. Kliknij przycisk Dalej.

  4. Umieść linię w scenie.

    Za pomocą myszy przesuń linię i nadaj jej pożądany kształt.

  5. Aby zmienić kierunek detekcji, włącz opcję Change direction (Zmień kierunek).

  6. Kliknij przycisk Dalej.

  7. Dodaj ustawienia detekcji.

    1. W obszarze Ignore short-lived objects (Ignorowanie obiektów krótkotrwałych) dodaj sekundy, które muszą następnie upłynąć do wyzwolenia.

    2. Wybierz typ wyzwalającego obiektu w obszarze Trigger on object type (Typ wyzwalającego obiektu).

    3. Dodaj zakres ograniczenia prędkości w obszarze Speed limit (Ograniczenie prędkości).

  8. Kliknij przycisk Dalej.

  9. Ustaw minimalny czas trwania alarmu w obszarze Minimum trigger duration (Minimalny czas alarmu).

    Wartość domyślna jest ustawiona na 2 sekundy. Jeśli scenariusz ma być wyzwalany za każdym razem, gdy obiekt przekroczy linię, zmniejsz czas trwania do 0 sekund.

  10. Kliknij przycisk Zapisz.

  1. Wyzwalanie przez obiekty przekraczające dwie linie:
  2. Wybierz Line crossing (Przekroczenie linii).

  3. Kliknij przycisk Dalej.

  4. Aby ustawić wyzwalanie alarmu po przekroczeniu przez obiekt dwóch linii, włącz opcję Require crossing of two lines (Wymagaj przekroczenia dwóch linii).

  5. Umieść linie w scenie.

    Za pomocą myszy przesuń linię i nadaj jej pożądany kształt.

  6. Aby zmienić kierunek detekcji, włącz opcję Change direction (Zmień kierunek).

  7. Kliknij przycisk Dalej.

  8. Dodaj ustawienia detekcji.

    1. W obszarze Max time between crossings (Maksymalny czas między przejściami) ustaw limit czasu między przekroczeniem pierwszej i drugiej linii.

    2. Wybierz typ wyzwalającego obiektu w obszarze Trigger on object type (Typ wyzwalającego obiektu).

    3. Dodaj zakres ograniczenia prędkości w obszarze Speed limit (Ograniczenie prędkości).

  9. Kliknij przycisk Dalej.

  10. Ustaw minimalny czas trwania alarmu w obszarze Minimum trigger duration (Minimalny czas alarmu).

    Wartość domyślna jest ustawiona na 2 sekundy. Jeśli scenariusz ma być wyzwalany za każdym razem, gdy obiekt przekroczył dwie linie, zmniejsz czas trwania do 0 sekund.

  11. Kliknij przycisk Zapisz.

Pobieranie i instalowanie aplikacji

Aby zainstalować aplikację, przejdź na stronę axis.com/products/axis-speed-monitor i pobierz najnowszą wersję. Zaloguj się do kamery, którą chcesz połączyć z radarem, lub bezpośrednio do radaru, a następnie wykonaj następujące czynności:

  1. Przejdź do menu Apps (Aplikacje).

  2. Kliknij przycisk Add app (Dodaj aplikację).

  3. Zaznacz plik w folderze pobranych elementów.

  4. Kliknij przycisk Install (Instaluj).

  5. Włącz aplikację, aby ją aktywować.

Uwaga

Aby uaktualnić aplikację, wystarczy po prostu zainstalować najnowszą wersję. Nie trzeba odinstalowywać poprzedniej wersji.

Konfigurowanie aplikacji

Uwaga

Umożliwia zsynchronizowanie godziny i daty kamery oraz połączonego radaru z serwerem NTP. Jeżeli godzina i data nie są zsynchronizowane, podczas eksportowania danych statystycznych nie będą wyświetlane prawidłowe informacje, a skonfigurowane w kamerze zdarzenia AXIS Speed Monitor mogą nie być prawidłowo wyzwalane.

W interfejsie WWW kamery:

  1. Przejdź do menu Apps (Aplikacje).

  2. Przejdź do AXIS Speed Monitor i kliknij Open (Otwórz).

  3. Uwaga

    W kamerach z syntezą radaru i wideo zintegrowany radar automatycznie łączy się z kamerą.

  4. Przejdź do sekcji Connect to radar (Połącz z radarem).

  5. Wprowadź adres radaru, nazwę użytkownika oraz hasło.

  6. Kliknij przycisk Połącz.

  7. Scenariusze skonfigurowane w radarze zostaną zaimportowane do aplikacji AXIS Speed Monitor.
  8. W celu dodania nakładek kliknij scenariusz, aby dodać i zmodyfikować parametry.

    Można dodać następujące parametry i odpowiadające im nakładki:

    • #n: nazwa scenariusza.

    • #M: bieżący pomiar prędkości obiektu najszybciej poruszającego się w scenariuszu.

    • #c: liczba pojazdów, jakie przejechały w ciągu ostatnich 15 minut.

    • #a: średnia prędkość w ostatnich 15 minutach.

  9. Aby przesunąć nakładkę w podglądzie na żywo, kliknij ją, a następnie przeciągnij i upuść w żądane miejsce.

  10. W celu usunięcia nakładki z podglądu na żywo należy usunąć odpowiedni parametr nakładki.

Uwaga

Jeśli chcesz zmienić nazwę scenariusza w radarze, w interfejsie WWW radaru przejdź do menu Radar > Scenarios (Radar > Scenariusze). Kliknij nazwę scenariusza, który chcesz zmodyfikować.

Eksportuj statystyki

Aplikacja rejestruje statystyki, które można pobrać w postaci pliku o wartościach rozdzielanych przecinkami (CSV). Można pobrać statystyki z jednego dnia lub z przedziału dat. Plik eksportu zawiera oznaczenia wszystkich wykrytych obiektów poruszających się w zasięgu detekcji oraz informacje o tym, kiedy owe obiekty znalazły się w konkretnym scenariuszu radaru i kiedy go opuściły.

Uwaga

Aby można było rejestrować dane śledzenia radaru, należy włożyć kartę SD to urządzenia, na którym jest zainstalowana aplikacja.

Radarowe dane śledzenia można również wysyłać za pośrednictwem protokołu MQTT. Więcej informacji: .

  • Parametry w pliku:
  • rmd_zone name: nazwa scenariusza.

  • tracking_id: Identyfikator obiektu w strumieniu metadanych radarowych. Zrestartowanie radaru spowoduje, że licznik zacznie liczyć od 1.

  • trigger_count: Ile razy doszło do wyzwolenia scenariusza w czasie, gdy znajdował się w nim aktywnie śledzony obiekt.

  • object_class: Dostępne klasy obiektów to „Human” (Człowiek), „Vehicle” (Pojazd) i „Unknown” (Nieznany). Wybierz klasę obiektów, które chcesz zliczać w scenariuszu.

  • weekday: Dzień tygodnia, w którym obiekt track_id znalazł się w scenariuszu.

  • date: Dzień kalendarzowy, w którym obiekt track_id znalazł się w scenariuszu.

  • time: Godzina, o której obiekt track_id znalazł się w scenariuszu, w formacie GG:MM:SS.

  • duration: Jak długo obiekt track_id przebywał wewnątrz scenariusza. Podawany w sekundach.

  • enter_bearing i exit_bearing: Kierunek, w którym był zwrócony obiekt, gdy wszedł/wjechał do scenariusza i gdy go opuścił. Kierunek jest podawany w stopniach i używa tej samej konwencji co metadane radarowe.

  • enter_direction i exit_direction: Tekstowy opis ruchu, na przykład „oddalanie się”, „w prawo”, „zbliżanie się” i „w lewo”.

  • min_speed, avg_speed, max_speed: Odpowiednio minimalna, średnia i maksymalna prędkość, z jaką obiekt poruszał się wewnątrz scenariusza. Podawana w kilometrach na godzinę (km/h) lub milach na godzinę (mph), zależnie od ustawień regionalnych.

  • speed_delta Różnica między prędkością obiektu przy opuszczaniu scenariusza a prędkością przy wchodzeniu/wjeżdżaniu do niego. Podawana w kilometrach na godzinę (km/h) lub milach na godzinę (mph), zależnie od ustawień regionalnych. Wartość dodatnia oznacza przyspieszanie, a wartość ujemna zwalnianie.

  • alarm: Wskazuje, czy wewnątrz scenariusza obiekt poruszał się z niedopuszczalną prędkością. 0 oznacza dopuszczalną prędkość, a 1 niedopuszczalną prędkość w określonym momencie.

Wysyłanie danych radaru za pomocą MQTT

Dane śledzenia radaru opisane w sekcji przez MQTT można wysyłać.

W tym przykładzie pokazujemy, jak skonfigurować klienta MQTT w urządzeniu, na którym jest zainstalowana aplikacja AXIS Speed Monitor, oraz jak utworzyć warunek publikujący dane pobrane za pomocą aplikacji AXIS Speed jako próbkę do brokera MQTT.

  • Zanim zaczniesz:
  • Skonfiguruj brokera MQTT i uzyskaj adres IP oraz nazwę użytkownika i hasło brokera.

    Więcej informacji na temat MQTT i brokerów MQTT można znaleźć w bazie wiedzy AXIS OS Knowledge Base.

  1. Skonfiguruj klienta MQTT za pomocą interfejsu WWW urządzenia, na którym jest zainstalowana aplikacja AXIS Speed Monitor:
  2. Otwórz menu System > MQTT > MQTT client > Broker (System > MQTT > Klient MQTT > Broker) i wpisz następujące informacje:

    • Host: Adres IP brokera

    • Client ID (Identyfikator klienta): Identyfikator urządzenia

    • Protocol (Protokół): Protokół, na który jest ustawiony broker

    • Port: Numer portu używany przez brokera

    • Username (nazwa użytkownika) i Password (hasło) brokera

  3. Kliknij Save (Zapisz) i Connect (Połącz).

  4. Utwórz warunek publikujący dane radaru jako próbkę do brokera MQTT:
  5. Przejdź do menu System > MQTT > MQTT publication (System > MQTT > Publikacja MQTT) i kliknij + Add condition (dodaj warunek).

  6. Z listy warunków w obszarze Application (Aplikacja) wybierz Speed Monitor: Track exited zone (Speed Monitor: Śledź opuszczoną strefę.

Urządzenie będzie teraz mogło wysyłać informacje o śladach radaru każdego poruszającego się obiektu, który opuszcza strefę scenariusza. Każdy obiekt będzie miał własne parametry śladu radaru, takie jak rmd_zone_name (nazwa strefy), tracking_id (id śledzenia), trigger_count (liczba wyzwoleń) i inne. Pełną listę parametrów śladu radaru można znaleźć w temacie .

Uwaga

Parametry min_speed (prędkość minimalna), avg_speed (prędkość średnia), max_speed (prędkość maksymalna) i speed_delta (różnica prędkości) w danych właściwych usługi MQTT są dostępne tylko w metrach na sekundę (m/s), a nie w km/h czy mph.

Konfiguracja reguł dotyczących zdarzeń

Aby uzyskać więcej informacji, zapoznaj się z przewodnikiem Get started with rules for events (Reguły dotyczące zdarzeń).

Wyzwalanie akcji

  1. Przejdź do menu System > Events (System > Zdarzenia) i dodaj regułę. Reguła określa, kiedy urządzenie wykona określone działania. Reguły można ustawić jako zaplanowane, cykliczne lub wyzwalane ręcznie.

  2. Wprowadź Name (Nazwę).

  3. Wybierz Condition (Warunek), który ma zostać spełniony w celu wyzwolenia akcji. Jeżeli w regule akcji zostanie określony więcej niż jeden warunek, wszystkie muszą zostać spełnione, aby wyzwolić akcję.

  4. Wybierz Action (Akcję), którą urządzenie ma wykonać po spełnieniu warunków.

Uwaga

Po dokonaniu zmian w aktywnej regule należy ją uruchomić ponownie, aby uwzględnić zmiany.

Aktywowanie syreny stroboskopowej, gdy radar wykryje przekroczenie ograniczenia prędkości

Aby poinformować piratów drogowych o ochronie, można użyć syreny stroboskopowej Axis.

W tym przykładzie wyjaśniono, jak spowodować aktywowanie syreny stroboskopowej za każdym razem, gdy aplikacja AXIS Speed Monitor za pomocą połączonego z nią radary wykryje przekroczenie dozwolonej prędkości.

  • Wymagania wstępne
  • Utwórz w syrenie stroboskopowej nowego użytkownika z rolą Operator lub Administrator.

  • Utwórz w w syrenie stroboskopowej dwa profile: jeden do sytuacji, gdy pojazd porusza się z dozwoloną prędkością, a drugi do sytuacji, gdy dojdzie do naruszenia ograniczenia prędkości.

  • Konfigurowanie AXIS Speed Monitor w kamerze

  • W podłączonym radarze dodaj scenariusz o nazwie „Obszar 1”.

  1. Utworzenie dwóch odbiorców w kamerze
  2. W internetowym interfejsie kamery przejdź do menu System > Events > Recipients (System > Zdarzenia > Odbiorcy) i dodaj odbiorcę.

  3. Wprowadź następujące informacje:

    • Nazwa: Aktywacja portu wirtualnego

    • Type (Typ): HTTP

    • URL: http://<adresIP>/axis-cgi/virtualinput/activate.cgi

      Zastąp element <adresIP> adresem syreny stroboskopowej.

    • Nazwa i hasło nowo utworzonego użytkownika syreny stroboskopowej.

  4. Kliknij przycisk Test (Testuj), sprawdzić, czy wszystkie dane są prawidłowe.

  5. Kliknij przycisk Zapisz.

  6. Dodaj drugiego odbiorcę z następującymi informacjami:

    • Nazwa: Dezaktywacja portu wirtualnego

    • Type (Typ): HTTP

    • URL: http://<adresIP>/axis-cgi/virtualinput/deactivate.cgi

      Zastąp element <adresIP> adresem syreny stroboskopowej.

    • Nazwa i hasło nowo utworzonego użytkownika syreny stroboskopowej.

  7. Kliknij przycisk Test (Testuj), sprawdzić, czy wszystkie dane są prawidłowe.

  8. Kliknij przycisk Zapisz.

  1. Utworzenie dwóch reguł w kamerze
  2. Przejdź do obszaru Rules (Reguły) i dodaj regułę.

  3. Wprowadź następujące informacje:

    • Nazwa: Aktywowanie wirtualnego WE/WY1

    • Condition (Warunek): Applications (Aplikacje) > Speed Monitor: Area 1 (Speed Monitor: obszar 1)

    • Action (Akcja): Notifications > Send notification through HTTP (Powiadomienia > Wyślij powiadomienie przez HTTP)

    • Recipient (Odbiorca): Aktywacja portu wirtualnego

    • Query string suffix (Sufiks ciągu zapytania): schemaversion=1&port=1

  4. Kliknij przycisk Zapisz.

  5. Dodaj kolejną regułę z następującymi informacjami:

    • Nazwa: Dezaktywacja wirtualnego WE/WY1

    • Condition (Warunek): Applications (Aplikacje) > Speed Monitor: Area 1 (Speed Monitor: obszar 1)

    • Action (Akcja): Notifications > Send notification through HTTP (Powiadomienia > Wyślij powiadomienie przez HTTP)

    • Recipient (Odbiorca): Dezaktywacja portu wirtualnego

    • Query string suffix (Sufiks ciągu zapytania): schemaversion=1&port=1

  6. Kliknij przycisk Zapisz.

  1. Utworzenie reguły w syrenie stroboskopowej
  2. W interfejsie urządzenia syreny stroboskopowej wybierz kolejno opcje System > Events (System > Zdarzenia) i dodaj regułę.

  3. Wprowadź następujące informacje:

    • Nazwa: Wyzwalacz w wirtualnym wejściu 1

    • Condition (Warunek): I/O (We/Wy) > Virtual input (Wejście wirtualne)

    • Port: 1

    • Action (Akcja): Light and siren > Run light and siren profile while the rule is active (Światło i syrena > Uruchom profil oświetlenia i syreny, gdy reguła jest aktywna)

    • Profile (Profil): wybierz nowo utworzony profil

  4. Kliknij przycisk Zapisz.

Integracja

Dla użytkowników oprogramowania AXIS Camera Station

Konfiguracja AXIS Speed Monitor

Aplikacja AXIS Speed Monitor może być zainstalowana na urządzeniu podłączonym do radaru lub bezpośrednio zainstalowana na radarze.

Gdy na urządzeniu lub radarze jest skonfigurowana aplikacja AXIS Speed Monitor, oprogramowanie AXIS Camera Station uznaje ją za zewnętrzne źródło danych. Można podłączyć widok do źródła danych, wyszukać prędkości obiektów, które zostały przechwycone przez urządzenie, i wyświetlić powiązany obraz.

  1. Pobierz i zainstaluj aplikację na urządzeniu.

  2. Skonfiguruj aplikację i radar. Patrz Instrukcja obsługi AXIS Speed Monitor.

  3. W przypadku istniejącej instalacji oprogramowania AXIS Camera Station odnów certyfikat serwera służący do komunikowania się z klientem. Patrz Odnowienie certyfikatu.

  4. Aby używać serwera programu AXIS Camera Station jako serwera NTP, włącz synchronizację czasu. Patrz Ustawienia serwera.

  5. Dodaj urządzenia pokrewne do AXIS Camera Station. Patrz Dodawanie urządzeń.

    • Jeżeli aplikacja jest zainstalowana na urządzeniu podłączonym do radaru, dodaj urządzenie i radar.

    • Jeżeli aplikacja jest zainstalowana w radarze, dodaj radar.

  6. Po odebraniu pierwszego zdarzenia źródło danych zostanie dodane automatycznie w folderze Configuration > Devices > External data sources (Konfiguracja > Urządzenia > Zewnętrzne źródła danych).

  7. Połącz źródło danych z widokiem. Patrz Zewnętrzne źródła danych.

  8. Wyszukaj prędkości obiektów zarejestrowane przez urządzenie. Patrz Wyszukiwanie danych.

  9. Kliknij przycisk , aby wyeksportować wyniki wyszukiwania do pliku .txt.

Dla użytkowników Milestone Xprotect

AXIS Optimizer for Milestone Xprotect® zawiera funkcję zwaną Wyszukiwanie prędkości w strefie. Funkcja ta współpracuje z monitorem AXIS Speed Monitor, umożliwiając wizualizację prędkości pojazdów w strefie detekcji radaru w podglądzie na żywo z kamery.

Użyj funkcji wyszukiwania prędkości w strefie do wyszukiwania pojazdów przekraczających prędkość wykrytych podczas wjazdu do wcześniej określonej strefy w widoku kamery. Więcej informacji, zob.: Wyszukiwanie prędkości w strefie w instrukcji obsługi aplikacji AXIS Optimizer.