Billigast vet jag inte. Men enklast är det. Fast det beror på vilka metoder man vill använda. Open CV så är raspberry bättre än stm32.
Linuxbaserade processorsystem VS FreeRTOS
Re: Linuxbaserade processorsystem VS FreeRTOS
Om man får förtydliga frågeställningen:
Jag är intresserad utav AI på inbyggda system. Detta har med robotik att göra, inget annat. Kan man få en radiostyrd bil eller robotar se med en kamera och identifiera vad den ser så kan man koppla ihop med Reinforcement Learning, vilket är i praktiken en hög med olika if-sataer uttryckt i linjär algebra.
Men för att tillämpa AI på enbyggda system så måste man ha en kamera + LCD. Men inte vilken kamera och LCD som helst. Det måste vara en kamera och LCD som har en DMA fästning(interfaces). Då går det otroligt snabbt.
För STM32 så kan man använda CubeMX AI där man kan generera TensorFlow Python modeller till C kod.
Men att programmera LCD + kamera för STM32 på den mest optimala metoden är svårt. Otroligt svårt. Finns dock manual till STMF7 processorerna, men STM32F7 är onödigt dyra för kamera + LCD i ett. (Rätta mig om jag har fel).
Dessutom så kan jag tillägga att djupa neurala CNN nätverk kräver tusentals bilder. Jag har programvara för LDA + PCA där man kan få till bildigenkänning med ca 100 bilder totalt AC 4 personer(25 bilder per person). En teknik som kallas för Fisher Faces. Används inom OpenCV.
För Linuxbaserade operativsystem så kan man köra allt i Java och få det otroligt simpelt. Här kan man tillämpa allt.
Jag skulle lätt bli övertygad över att använda STM32 för kamera/LCD istället för Raspberry om någon kunde vägleda mig. Att hänvisa till ST's manualer är dock ingen idé. Dom är dåliga.
Jag är intresserad utav AI på inbyggda system. Detta har med robotik att göra, inget annat. Kan man få en radiostyrd bil eller robotar se med en kamera och identifiera vad den ser så kan man koppla ihop med Reinforcement Learning, vilket är i praktiken en hög med olika if-sataer uttryckt i linjär algebra.
Men för att tillämpa AI på enbyggda system så måste man ha en kamera + LCD. Men inte vilken kamera och LCD som helst. Det måste vara en kamera och LCD som har en DMA fästning(interfaces). Då går det otroligt snabbt.
För STM32 så kan man använda CubeMX AI där man kan generera TensorFlow Python modeller till C kod.
Men att programmera LCD + kamera för STM32 på den mest optimala metoden är svårt. Otroligt svårt. Finns dock manual till STMF7 processorerna, men STM32F7 är onödigt dyra för kamera + LCD i ett. (Rätta mig om jag har fel).
Dessutom så kan jag tillägga att djupa neurala CNN nätverk kräver tusentals bilder. Jag har programvara för LDA + PCA där man kan få till bildigenkänning med ca 100 bilder totalt AC 4 personer(25 bilder per person). En teknik som kallas för Fisher Faces. Används inom OpenCV.
För Linuxbaserade operativsystem så kan man köra allt i Java och få det otroligt simpelt. Här kan man tillämpa allt.
Jag skulle lätt bli övertygad över att använda STM32 för kamera/LCD istället för Raspberry om någon kunde vägleda mig. Att hänvisa till ST's manualer är dock ingen idé. Dom är dåliga.
Senast redigerad av DanielM 29 juli 2020, 06:11:04, redigerad totalt 1 gång.
Re: Linuxbaserade processorsystem VS FreeRTOS
Rick81 skrev: ↑28 juli 2020, 22:55:04 Kan tillägga att jag själv implementerat kamera och display i en STM32F1 på 72 MHz. Visserligen var det bara 320x240 pixlar. Men visst det var en del jobb få till det....
Tror nog ESP32 är mer pålitligt än Raspberry pi om man ska använda i kommersiella produkter med livslängd mer än 1 år...
320x240 pixlar är enormt ska du veta. Normalt brukar CNN nätverk vara på 28x28.
Jag tror också rent C kodande är mer pålitligt än i Raspberry. Men nu handlat det om att överträffa det som finns.
Alternativ 1:
* STM32 kamera - Vilken?
* STM32 LCD - Vilken?
* CNN nätverk
Alternativ 2:
* Raspberry Pi 4
* Valfri modell
Re: Linuxbaserade processorsystem VS FreeRTOS
Jag körde mostvarande denna kameran:
https://www.electrodragon.com/product/o ... ra-module/
Kameran intieras via I2C och sedan "bitbangar" jag ut parallellbussen.
LCD koppplas via FMSC bussen (externa minnesbussen) på STM32F1. Huvudloopen blir inte värre än så här:
Sen hanterar jag vsync via EXTI interupt:
https://www.electrodragon.com/product/o ... ra-module/
Kameran intieras via I2C och sedan "bitbangar" jag ut parallellbussen.
LCD koppplas via FMSC bussen (externa minnesbussen) på STM32F1. Huvudloopen blir inte värre än så här:
Kod: Markera allt
FIFO_GPIO_Configuration();
FIFO_CS_L();
FIFO_WE_H();
while( 1 != OV7725_Init() );
OV7725_EXTI_Configuration();
OV7725_NVIC_Configuration();
Vsync = 0;
LCD_Initializtion(true);
LCD_ADC_Init();
bool releasedJoy = false;
while (1)
{
CommonLoop();
if( Vsync == 2 )
{
LCD_SetCursor(0, 0);
LCD_WriteRAM_Prepare();
FIFO_RRST_L();
FIFO_RCLK_L();
FIFO_RCLK_H();
FIFO_RRST_H();
FIFO_RCLK_L();
FIFO_RCLK_H();
for( count = 0; count < 76800; count++ )
{
FIFO_RCLK_L();
CMOS_Data = (GPIOC->IDR<<8) & 0xff00;
FIFO_RCLK_H();
FIFO_RCLK_L();
CMOS_Data |= (GPIOC->IDR) & 0x00ff;
FIFO_RCLK_H();
LCD_WriteRAM(CMOS_Data);
}
Vsync = 0;
}
}
}
Kod: Markera allt
void EXTI0_IRQHandler(void)
{
if ( EXTI_GetITStatus(EXTI_LINE_VSYNC_CMOS) != RESET )
{
if( Vsync == 0 )
{
FIFO_WRST_L();
FIFO_WE_H();
Vsync = 1;
FIFO_WE_H();
FIFO_WRST_H();
}
else if( Vsync == 1 )
{
FIFO_WE_L();
Vsync = 2;
}
EXTI_ClearITPendingBit(EXTI_LINE_VSYNC_CMOS);
}
}
Re: Linuxbaserade processorsystem VS FreeRTOS
AI var förvisso inte med i orginalfrågan.
Då kanske någon av Nvidias chip är lämpligare än en RPI.
Då kanske någon av Nvidias chip är lämpligare än en RPI.
Re: Linuxbaserade processorsystem VS FreeRTOS
Du ställer en till synes ganska generell fråga om något som beror på en massa faktorer. Vilka är kraven? Bygger du något som ska användas i ett enda exemplar, eller tänker du serietillverka tusentals enheter? Varför är det viktigt med en sekundsnabb boot-tid? Vad ska hända med output från kameran? Etc etc
Re: Linuxbaserade processorsystem VS FreeRTOS
Ok, så din applikation är "seende robotar". Det låter spännande. (Din definition av reinforcement learning är lite udda, faktiskt.) Vad skall roboten se? Hur fort skall det gå? Färg/svartvitt? Upplösning?Jag är intresserad utav AI på inbyggda system. Detta har med robotik att göra, inget annat. Kan man få en radiostyrd bil eller robotar se med en kamera och identifiera vad den ser så kan man koppla ihop med Reinforcement Learning, vilket är i praktiken en hög med olika if-sataer uttryckt i linjär algebra.
Hastigheten du behöver beror på vilken upplösning och framerate du har. Vad LCD har med detta att göra får du nog utveckla lite.Men för att tillämpa AI på enbyggda system så måste man ha en kamera + LCD. Men inte vilken kamera och LCD som helst. Det måste vara en kamera och LCD som har en DMA fästning(interfaces). Då går det otroligt snabbt.
Djupa neurala nätverk är en sak. PCA, Fisher faces osv är helt andra saker. Hänger detta ihop med det du tänker göra? Kanske skall börja med att fokusera på en sak i taget.Dessutom så kan jag tillägga att djupa neurala CNN nätverk kräver tusentals bilder. Jag har programvara för LDA + PCA där man kan få till bildigenkänning med ca 100 bilder totalt AC 4 personer(25 bilder per person). En teknik som kallas för Fisher Faces. Används inom OpenCV.
Storleksordningen 320x240 är väl tänligen normalt för klassiska neuralnät för bildapplikationer. Har du funderat på beräkningstiden för ett lämpligt CNN på din målplatform? Det vore ju trist om du inte kunde processa mer än någon frame per sekund om det är "realtid" du vill ha. (Vill du det?) För hög prestanda är det nog enklare (och troligen dyrare) att använda exempelvis Nvidia Jetson, om du kan få tag på ett sådant. Men du kommer att behöva stort batteri.320x240 pixlar är enormt ska du veta. Normalt brukar CNN nätverk vara på 28x28.
Re: Linuxbaserade processorsystem VS FreeRTOS
Så denna OV kamera kopplas in på I2C endast och "bittlangar" med något protokoll?Rick81 skrev: ↑29 juli 2020, 08:45:43 Jag körde mostvarande denna kameran:
https://www.electrodragon.com/product/o ... ra-module/
Kameran intieras via I2C och sedan "bitbangar" jag ut parallellbussen.
LCD koppplas via FMSC bussen (externa minnesbussen) på STM32F1. Huvudloopen blir inte värre än så här:Sen hanterar jag vsync via EXTI interupt:Kod: Markera allt
FIFO_GPIO_Configuration(); FIFO_CS_L(); FIFO_WE_H(); while( 1 != OV7725_Init() ); OV7725_EXTI_Configuration(); OV7725_NVIC_Configuration(); Vsync = 0; LCD_Initializtion(true); LCD_ADC_Init(); bool releasedJoy = false; while (1) { CommonLoop(); if( Vsync == 2 ) { LCD_SetCursor(0, 0); LCD_WriteRAM_Prepare(); FIFO_RRST_L(); FIFO_RCLK_L(); FIFO_RCLK_H(); FIFO_RRST_H(); FIFO_RCLK_L(); FIFO_RCLK_H(); for( count = 0; count < 76800; count++ ) { FIFO_RCLK_L(); CMOS_Data = (GPIOC->IDR<<8) & 0xff00; FIFO_RCLK_H(); FIFO_RCLK_L(); CMOS_Data |= (GPIOC->IDR) & 0x00ff; FIFO_RCLK_H(); LCD_WriteRAM(CMOS_Data); } Vsync = 0; } } }
Kod: Markera allt
void EXTI0_IRQHandler(void) { if ( EXTI_GetITStatus(EXTI_LINE_VSYNC_CMOS) != RESET ) { if( Vsync == 0 ) { FIFO_WRST_L(); FIFO_WE_H(); Vsync = 1; FIFO_WE_H(); FIFO_WRST_H(); } else if( Vsync == 1 ) { FIFO_WE_L(); Vsync = 2; } EXTI_ClearITPendingBit(EXTI_LINE_VSYNC_CMOS); } }
Vad är bäst FMSC eller SPI när det kommer till LCD? Jag har en LCD med SPI. ILI9341.
Re: Linuxbaserade processorsystem VS FreeRTOS
Jag tänker inte masstillverka. Utan jag vill ha en proper lösning på ett problem.davidi skrev: ↑29 juli 2020, 10:53:12 Du ställer en till synes ganska generell fråga om något som beror på en massa faktorer. Vilka är kraven? Bygger du något som ska användas i ett enda exemplar, eller tänker du serietillverka tusentals enheter? Varför är det viktigt med en sekundsnabb boot-tid? Vad ska hända med output från kameran? Etc etc
Re: Linuxbaserade processorsystem VS FreeRTOS
Jag har ingen specifikation än. Jag sitter bara och rabblar upp massa idéer för mig själv
Reinforcement learning är i praktiken "massa if-satser", fast istället för skriva if-satserna, så låter man en algoritm forma logiken (ej riktiga if-satser).
Kan man få 20 FPS per sekund? Det kanske låter lite mycket?Hastigheten du behöver beror på vilken upplösning och framerate du har. Vad LCD har med detta att göra får du nog utveckla lite.
Jag försöker avgöra vad är egentligen bäst. STM32-vägen eller Raspberry-vägen?Djupa neurala nätverk är en sak. PCA, Fisher faces osv är helt andra saker. Hänger detta ihop med det du tänker göra? Kanske skall börja med att fokusera på en sak i taget.
Jag har inte kommit så långt. Just nu funderar jag på vilken plattform jag ska använda mig utav.Storleksordningen 320x240 är väl tänligen normalt för klassiska neuralnät för bildapplikationer. Har du funderat på beräkningstiden för ett lämpligt CNN på din målplatform? Det vore ju trist om du inte kunde processa mer än någon frame per sekund om det är "realtid" du vill ha. (Vill du det?) För hög prestanda är det nog enklare (och troligen dyrare) att använda exempelvis Nvidia Jetson, om du kan få tag på ett sådant. Men du kommer att behöva stort batteri.
Re: Linuxbaserade processorsystem VS FreeRTOS
Ett förslag är att börja modellera på en vanlig PC (med GPU för NN-accellerering, vid behov). Utveckla din algoritm där och mät prestanda och kostnad "kontinuerligt". Då får du ett bra hum om vad som kostar vad, och i slutändan vilken målplatform som kommer att fungera för din lösning.Jag har inte kommit så långt. Just nu funderar jag på vilken plattform jag ska använda mig utav.
Re: Linuxbaserade processorsystem VS FreeRTOS
Jag bitbangar en parallell 8 bit databus från kameran. Protokollet är sköts via FIFO_XXX signalerna i koden.Så denna OV kamera kopplas in på I2C endast och "bittlangar" med något protokoll?
FMSC/parallellt är alltid snabbare än SPI. Förenklat kan man säga att en 16 bit FMSC buss är 16 ggr snabbare än SPI på samma klockfrekvens. Lite sanning med modifikation, men inte långt ifrån.Vad är bäst FMSC eller SPI när det kommer till LCD? Jag har en LCD med SPI. ILI9341.
Re: Linuxbaserade processorsystem VS FreeRTOS
Okej. Hittade en manual hur man gör med just LCD. Men denna har inte touch.
Men vi kan göra en jämförelse mellan olika platformar:
STM32:
* OV2640
* 3.2" ILI3941 touch LCD
* C-programmering
* STM32 CPU = 30 kr
https://www.banggood.com/XD-95-OV2640-C ... rehouse=CN
https://www.banggood.com/3_2-Inch-ILI93 ... rehouse=CN
Raspberry:
* Pi kamera
* 3.5" touch LCD (innehåller även skal till Paj4)
* Java-programmering
* Paj pris (zero) = 60 kr
https://www.banggood.com/Camera-Module- ... mds=search
https://www.banggood.com/3_5-Inch-LCD-D ... rehouse=CN
Låt oss säga att du ska göra häftiga saker med detta. T.ex. AI-kamera eller övervakningskamera. Det ska vara bra kvalité och det skall vara en proper lösning.
Självklart är pajen dyrare, men den kanske ger bättre kvalité också?
Det finns ju inget värre än en dålig kamera som luktar Nokia 7650
Då är frågan: Vilket av dessa är bäst?
När jag menar bäst så menar jag:
1. Starttid
2. Kamera kvalité
3. FPS
4. Snabbhet
5. Möjlighet till att integrera andra finesser så som eposttjänst, webserver med mera.
Men vi kan göra en jämförelse mellan olika platformar:
STM32:
* OV2640
* 3.2" ILI3941 touch LCD
* C-programmering
* STM32 CPU = 30 kr
https://www.banggood.com/XD-95-OV2640-C ... rehouse=CN
https://www.banggood.com/3_2-Inch-ILI93 ... rehouse=CN
Raspberry:
* Pi kamera
* 3.5" touch LCD (innehåller även skal till Paj4)
* Java-programmering
* Paj pris (zero) = 60 kr
https://www.banggood.com/Camera-Module- ... mds=search
https://www.banggood.com/3_5-Inch-LCD-D ... rehouse=CN
Låt oss säga att du ska göra häftiga saker med detta. T.ex. AI-kamera eller övervakningskamera. Det ska vara bra kvalité och det skall vara en proper lösning.
Självklart är pajen dyrare, men den kanske ger bättre kvalité också?
Det finns ju inget värre än en dålig kamera som luktar Nokia 7650
Då är frågan: Vilket av dessa är bäst?
När jag menar bäst så menar jag:
1. Starttid
2. Kamera kvalité
3. FPS
4. Snabbhet
5. Möjlighet till att integrera andra finesser så som eposttjänst, webserver med mera.
Re: Linuxbaserade processorsystem VS FreeRTOS
Funkar verkligen den kameran till Pi Zero? Har för mig den har begränsade anslutningsmöjligheter.
Annars tror jag 2,3,4 är bättre med pi.
Sen skulle jag säga att 5 beror på vad ska ha den till
* Epost, webserver - pi
* Annan hårdvara, ex servo, mäta rotationshastigheter (din andra tråd) - stm32
Annars tror jag 2,3,4 är bättre med pi.
Sen skulle jag säga att 5 beror på vad ska ha den till
* Epost, webserver - pi
* Annan hårdvara, ex servo, mäta rotationshastigheter (din andra tråd) - stm32