1
00:00:07,250 --> 00:00:12,790
Guys this is Caleb with slopes and in this video we're going to set up an instance of a speech synthesizer

2
00:00:13,000 --> 00:00:17,060
to speak what we see in our images it's going to be really cool.

3
00:00:17,080 --> 00:00:22,450
And when I initially thought of this idea I thought of it as a way to be kind of like an assistive technology

4
00:00:22,870 --> 00:00:24,860
perhaps to those who are vision impaired.

5
00:00:25,000 --> 00:00:29,950
If they if they can't see what is in front of them they could use our app to scan things and it could

6
00:00:29,950 --> 00:00:35,200
speak to them so they can hear what they're seeing so kind of like they can see with their ears supercool

7
00:00:35,740 --> 00:00:39,540
and actually to use Avie speech synthesizer is not very difficult.

8
00:00:39,790 --> 00:00:42,700
So I just want to show you how to use it and how I use it in this app.

9
00:00:42,700 --> 00:00:49,540
So pull open that X code project and let's go ahead and let's begin by actually creating an instance

10
00:00:49,630 --> 00:00:51,820
of A-V speech synthesizer.

11
00:00:51,850 --> 00:01:01,520
So go ahead and type var speech synthesizer and that's going to be of type Avie speech synthesizer can

12
00:01:01,570 --> 00:01:03,010
instantiate it.

13
00:01:03,340 --> 00:01:04,570
And that's that.

14
00:01:04,570 --> 00:01:09,250
Now if you look deeply inside of this you'll notice that this comes from A-V foundation.

15
00:01:09,250 --> 00:01:13,910
So we've already integrated the foundation to capture our photo.

16
00:01:14,020 --> 00:01:20,060
But the a part of A-V stands for audio and that's where our A-V speech synthesizer will come into play.

17
00:01:20,220 --> 00:01:20,770
OK.

18
00:01:21,220 --> 00:01:28,570
Now what we do need to do for this to work is we need to set the speech synthesisers delegate to be

19
00:01:28,930 --> 00:01:30,150
this view controller.

20
00:01:30,190 --> 00:01:35,310
So go ahead and type speech synthesizer delegate and that equals self.

21
00:01:35,320 --> 00:01:41,800
Now if we try to build and run this there is an error cannot assign value of type camera AVC to A-V

22
00:01:41,800 --> 00:01:44,090
speech synthesizer delegate.

23
00:01:44,260 --> 00:01:51,630
Now to fix that we're going to create an extension of A-V speech synthesizer delegate K that's going

24
00:01:51,630 --> 00:01:55,680
to give us the ability to call some important delegate methods that we need.

25
00:01:55,690 --> 00:02:00,430
So go ahead and type extension CAMRA AVC and we're going to do.

26
00:02:00,440 --> 00:02:03,510
Avies speech synthesizer delegate.

27
00:02:03,920 --> 00:02:04,340
OK.

28
00:02:04,390 --> 00:02:09,670
And the function we're going to call is called did finish utterance and we'll talk about that in a second.

29
00:02:09,940 --> 00:02:17,840
So just go ahead and add that function and code to finish utterance We'll come back to that in a second.

30
00:02:17,980 --> 00:02:24,360
But for now if we go back up to view whereas that view did appear you can see that error went away because

31
00:02:24,370 --> 00:02:27,640
now we are conforming to speech synthesizer delegate.

32
00:02:27,640 --> 00:02:29,050
That's all we need.

33
00:02:29,050 --> 00:02:37,900
So in order to actually speak something we need to be able to create a speech utterance to get an avi

34
00:02:37,900 --> 00:02:40,030
speech utterance to actually speak.

35
00:02:40,030 --> 00:02:41,770
We need to pass it a string.

36
00:02:41,890 --> 00:02:47,470
So we're going to create a function that basically allows us to pass a string into an avi speech utterance

37
00:02:47,500 --> 00:02:49,990
and then use our synthesizer to speak it.

38
00:02:49,990 --> 00:02:59,840
So go ahead and type phunk synthesize speech speech from string and we're going to use an internal parameter

39
00:02:59,840 --> 00:03:01,740
they're called string.

40
00:03:02,090 --> 00:03:04,440
Of course of type string.

41
00:03:04,850 --> 00:03:10,520
And basically what we're going to do is we'll create an instance of Avie speech utterance we'll pass

42
00:03:10,520 --> 00:03:15,130
it the string and then we will ask our synthesizer to speak the utterance.

43
00:03:15,140 --> 00:03:21,420
So go ahead and type let speech utterance equals Avies speech utterance.

44
00:03:21,710 --> 00:03:25,310
And we're going to pass a string K and that's what it's going to speak.

45
00:03:25,310 --> 00:03:28,870
Now of course this is the string we're passing in.

46
00:03:28,910 --> 00:03:34,280
So go ahead and type string and it can be that lowercase string from the internal parameter.

47
00:03:34,750 --> 00:03:42,060
OK so then now that we have that utterance we can call our synthesizer K speech synthesizer speak.

48
00:03:42,080 --> 00:03:50,750
And you'll notice it asks for an example of A-V speech utterance and we have that speech whoops speech

49
00:03:51,170 --> 00:03:52,380
utterance.

50
00:03:52,370 --> 00:03:53,570
OK that's what we need to pass it.

51
00:03:53,580 --> 00:03:59,740
Now this function for any string we pass in it will speak it.

52
00:03:59,810 --> 00:04:05,310
That's the cool thing of Avies speech synthesizer any string we pass in it's going to speak for us.

53
00:04:05,420 --> 00:04:13,670
So we need to determine when we should speak this and that is basically when we classify our results.

54
00:04:13,700 --> 00:04:18,860
So when we pull through all of our classifications if it comes to something that it has no idea what

55
00:04:18,860 --> 00:04:22,540
it is if it's not sure we should speak that OK.

56
00:04:22,880 --> 00:04:27,380
Now what we're going to do is we're actually going to take this string and I'm going to go ahead and

57
00:04:27,380 --> 00:04:29,320
copy it and delete it.

58
00:04:29,480 --> 00:04:35,400
And we're going to call this let unknown object message.

59
00:04:35,780 --> 00:04:37,570
And that's what we're going to use here.

60
00:04:37,790 --> 00:04:39,990
Unknown object message.

61
00:04:40,100 --> 00:04:46,280
We're going to also use that in our synthesized speech function so go ahead and call synthesized speech

62
00:04:46,280 --> 00:04:50,070
from string and we're gonna give it our unknown object message.

63
00:04:50,090 --> 00:04:54,740
Now whenever we find something that we don't know what it is it's going to say I'm not sure what this

64
00:04:54,740 --> 00:04:55,010
is.

65
00:04:55,010 --> 00:04:56,320
Please try again.

66
00:04:56,360 --> 00:04:57,180
Very cool.

67
00:04:57,500 --> 00:05:07,250
But we need to also create a string that's going to classify our object and give a level of confidence.

68
00:05:07,340 --> 00:05:13,270
So to do that I'm going to go ahead and I'm going to actually create some variables for this as well

69
00:05:13,280 --> 00:05:23,850
so I'm going to cut this and just create var identification and let's go ahead and do var confidence.

70
00:05:23,960 --> 00:05:30,720
And we're going to actually take our confidence value here as well and let's go ahead and cut that out.

71
00:05:30,740 --> 00:05:31,920
Let's put it here.

72
00:05:32,060 --> 00:05:32,660
Cut that out.

73
00:05:32,660 --> 00:05:33,830
Confidence.

74
00:05:33,830 --> 00:05:34,490
All right cool.

75
00:05:34,610 --> 00:05:37,520
So we're going to pass in the confidence that we just created.

76
00:05:37,520 --> 00:05:41,490
We're going to give this the identification as a string.

77
00:05:41,690 --> 00:05:43,250
And so that looks good.

78
00:05:43,700 --> 00:05:46,640
OK let's go ahead and make sure those little warnings go away.

79
00:05:47,110 --> 00:05:47,720
Oh OK.

80
00:05:47,780 --> 00:05:48,940
They were never mutated.

81
00:05:49,010 --> 00:05:50,740
Let's just create them in two constants.

82
00:05:50,750 --> 00:05:52,270
Good call X code.

83
00:05:52,460 --> 00:05:54,280
Always looking out for me.

84
00:05:54,290 --> 00:05:54,740
Very cool.

85
00:05:54,740 --> 00:05:55,000
OK.

86
00:05:55,010 --> 00:05:55,850
So that's good.

87
00:05:56,120 --> 00:06:02,840
But now we need to speak what it is that we saw so let's call synthesized speech and this string what

88
00:06:02,840 --> 00:06:10,460
we're going to do is we're going to compile both of these into a nice long sentence that makes sense

89
00:06:10,460 --> 00:06:12,160
that feels like natural language.

90
00:06:12,170 --> 00:06:16,560
So let's call this complete sentence.

91
00:06:17,180 --> 00:06:22,780
And we're going to basically say this looks like a.

92
00:06:23,480 --> 00:06:27,050
And we're going to pass in the identifier or sorry the identification.

93
00:06:27,050 --> 00:06:28,720
This looks like a fish.

94
00:06:28,730 --> 00:06:32,780
This looks like a remote and I'm

95
00:06:35,480 --> 00:06:38,090
and here's where we pass in our confidence.

96
00:06:38,540 --> 00:06:38,890
OK.

97
00:06:38,910 --> 00:06:41,610
I'm blank per cent sure.

98
00:06:41,630 --> 00:06:48,030
So for an example this could be this looks like a remote control and I'm 98 percent sure.

99
00:06:48,170 --> 00:06:49,240
Pretty cool.

100
00:06:49,240 --> 00:06:54,700
Now we're going to synthesize that complete sentence so that it speaks that outloud and.

101
00:06:54,940 --> 00:06:55,630
Yeah.

102
00:06:55,730 --> 00:06:56,830
So this should work.

103
00:06:56,840 --> 00:06:59,310
This should synthesize our speech.

104
00:06:59,780 --> 00:07:05,000
If we go inside A-V speech synthesizer if you look inside of it you can see it has a delegate it has

105
00:07:05,000 --> 00:07:10,490
all kinds of booleans to check to see whether or not it's speaking if it's pause it has some functions

106
00:07:10,490 --> 00:07:11,660
to speak.

107
00:07:11,660 --> 00:07:15,220
And I should have shown you that earlier but I didn't.

108
00:07:15,290 --> 00:07:20,790
You can look inside here and you can see all of the cool things that A-V speech synthesizer and Avies

109
00:07:20,790 --> 00:07:22,090
speech utterance can do.

110
00:07:22,100 --> 00:07:24,410
You can even change the voice which is kind of cool.

111
00:07:24,410 --> 00:07:27,950
There's a system default but you could turn it into a different voice.

112
00:07:27,950 --> 00:07:29,990
And we can play around with that later.

113
00:07:29,990 --> 00:07:33,720
But for now let's go ahead and build and run this let's see if it works.

114
00:07:37,820 --> 00:07:40,180
OK let's pull open quick time here.

115
00:07:40,410 --> 00:07:43,030
Time using two is what I'm using to record my screen.

116
00:07:43,040 --> 00:07:47,900
If you don't know you can go in quick time and you can actually choose your iPhone as an input camera

117
00:07:47,900 --> 00:07:48,910
which is very cool.

118
00:07:49,160 --> 00:07:53,770
So anyway let's go ahead and let's tap on the screen k.

119
00:07:53,960 --> 00:08:01,510
So it looks like it's showing the K looks like it's showing everything but it doesn't appear that it's

120
00:08:01,510 --> 00:08:04,340
speaking.

121
00:08:04,570 --> 00:08:08,140
Let's see oh you know what I bet.

122
00:08:08,200 --> 00:08:09,590
Wait let me try to turn up.

123
00:08:10,020 --> 00:08:10,770
Whoa.

124
00:08:11,670 --> 00:08:14,270
Because that's that's broadcasting my microphone.

125
00:08:14,280 --> 00:08:19,120
Let me try to set the microphone of this recording to be my iPhone.

126
00:08:19,530 --> 00:08:26,080
And then when I take a picture we should be able to hear it now.

127
00:08:27,240 --> 00:08:28,270
Did you hear that.

128
00:08:28,290 --> 00:08:31,750
That's what we that's what we just said let's do it again.

129
00:08:31,910 --> 00:08:34,410
All right.

130
00:08:34,630 --> 00:08:38,370
And did you guys hear the camera shutter sound as well that's in there we just couldn't hear it because

131
00:08:38,370 --> 00:08:40,380
I didn't have the sound patch through correctly.

132
00:08:40,380 --> 00:08:45,400
All right let's let's try with something that he doesn't know.

133
00:08:45,680 --> 00:08:46,970
It's so cool.

134
00:08:47,310 --> 00:08:50,680
Let's see maybe I can try it with.

135
00:08:50,920 --> 00:08:52,530
Let's try it with some sunglasses.

136
00:08:52,530 --> 00:08:53,920
Here we go.

137
00:08:53,990 --> 00:08:54,640
Let's see.

138
00:08:57,290 --> 00:08:58,860
I'm not sure what this is.

139
00:08:58,880 --> 00:09:00,590
Please try again and see.

140
00:09:03,970 --> 00:09:05,870
Oh.

141
00:09:06,380 --> 00:09:11,900
And one thing to remember guys is this is not an exact science it's not absolutely perfect because it's

142
00:09:11,900 --> 00:09:13,930
not going to be able to identify every object.

143
00:09:13,930 --> 00:09:17,030
It's only going to be able to go off of what it knows and what it understands.

144
00:09:17,090 --> 00:09:21,470
But sometimes you can see what it is why it made the association it did.

145
00:09:21,470 --> 00:09:23,090
It said this was a jeweler's loop.

146
00:09:23,210 --> 00:09:29,270
And if you think about it a jeweler's loop is a circular device with a circular piece of glass and a

147
00:09:29,270 --> 00:09:33,290
kind of a lens looking thing so it makes sense why it thinks certain things at time.

148
00:09:33,290 --> 00:09:36,780
Let's try this again.

149
00:09:42,300 --> 00:09:43,060
All right cool.

150
00:09:43,110 --> 00:09:49,080
So as you can see it can identify things it's not perfect it has its issues but a lot of things that

151
00:09:49,080 --> 00:09:51,450
can identify properly which is just so cool.

152
00:09:51,450 --> 00:09:57,230
We have an app that can identify it can speak to us it can do all these amazing things.

153
00:09:57,270 --> 00:09:57,560
All right.

154
00:09:57,560 --> 00:10:03,870
So really cool this this works we can tap it.

155
00:10:04,980 --> 00:10:06,630
And it speaks to us which is very cool.

156
00:10:06,630 --> 00:10:12,690
But the issue is right now I can tap on the screen 10 times and it's going to speak 10 times of what

157
00:10:12,690 --> 00:10:14,210
I saw and what I took photos of.

158
00:10:14,210 --> 00:10:20,100
So I think that we should add a little activity spinner on this image to show that it's loading and

159
00:10:20,100 --> 00:10:20,820
it's speaking.

160
00:10:20,820 --> 00:10:26,540
And we should basically disable the tap gesture recognizer while it's speaking.

161
00:10:26,670 --> 00:10:27,180
OK.

162
00:10:27,240 --> 00:10:28,700
It's really easy to set this up.

163
00:10:28,710 --> 00:10:33,240
But first we need to go ahead and add a UI activity indicator.

164
00:10:33,360 --> 00:10:39,000
So go ahead and type UI activity indicator view and of course we're in mind that storyboard we're going

165
00:10:39,000 --> 00:10:43,540
to drag that on and center it right there on our UI image view.

166
00:10:43,650 --> 00:10:50,640
We're going to set it to be white and we're going to pin it in the exact center of this container which

167
00:10:50,700 --> 00:10:52,480
of course oh you know what.

168
00:10:52,560 --> 00:10:53,920
No that is not what we want.

169
00:10:53,940 --> 00:10:59,850
We want to select the image view then the activity indicator and we want to give them the same horizontal

170
00:10:59,850 --> 00:11:01,420
and vertical center.

171
00:11:01,460 --> 00:11:01,950
OK.

172
00:11:02,130 --> 00:11:03,140
Just like that.

173
00:11:03,420 --> 00:11:07,570
And you know what we're going to actually set this to be hidden from the get go.

174
00:11:07,770 --> 00:11:10,590
So you can actually just do that right in Interface Builder.

175
00:11:10,650 --> 00:11:16,800
We don't need to do that in code or anything but what we do need to do is we need to add an IB action

176
00:11:16,980 --> 00:11:24,110
or rather an outlet so that we can modify this we can show it we can animate it et cetera et cetera.

177
00:11:24,120 --> 00:11:29,640
So in Interface Builder go ahead and open up the assistant editor and if it's not already there go ahead

178
00:11:29,640 --> 00:11:34,860
and click automatic and it should load the proper view controller and that looks good.

179
00:11:34,930 --> 00:11:37,560
When I close those get out of my way.

180
00:11:37,560 --> 00:11:38,100
Perfect.

181
00:11:38,100 --> 00:11:38,360
OK.

182
00:11:38,370 --> 00:11:41,250
So go ahead and right click.

183
00:11:41,670 --> 00:11:48,540
Right click from the activity indicator and go ahead and drag over to your other outlets which are down

184
00:11:48,540 --> 00:11:54,250
here for me and I'm just going to call this the spinner because that's basically what it is is a spinner.

185
00:11:54,480 --> 00:12:00,500
Now go ahead and go back to your code file and just make sure we can get.

186
00:12:00,510 --> 00:12:01,630
We have our spinner.

187
00:12:01,800 --> 00:12:02,970
That's awesome.

188
00:12:03,000 --> 00:12:11,490
And now we need to do is we need to basically change so that whenever we tap the camera view it's going

189
00:12:11,490 --> 00:12:13,740
to go ahead and show the spinner.

190
00:12:13,740 --> 00:12:20,650
It's going to go ahead and pause out the tap gesture recognizer so that input cannot be sent in anymore.

191
00:12:20,910 --> 00:12:28,400
And then it's basically going to hide and re-enable the tap gesture recognizer as soon as it's done.

192
00:12:28,390 --> 00:12:32,300
And we also added this function did finish utterance.

193
00:12:32,370 --> 00:12:35,470
That's where we can re-enable everything which is perfect.

194
00:12:35,490 --> 00:12:43,240
So go ahead and actually up here at the top when we call did tap camera view here's what we're going

195
00:12:43,250 --> 00:12:43,670
to do.

196
00:12:43,680 --> 00:12:51,000
We're going to call self camera view is user interaction and enable set to false because when we tap

197
00:12:51,000 --> 00:12:54,630
it we should disable it from showing anything really.

198
00:12:54,630 --> 00:12:55,740
That is what we're going to do.

199
00:12:55,920 --> 00:13:04,110
So go ahead and type that and yeah we just disable the camera view from being tapped while it is capturing

200
00:13:04,800 --> 00:13:08,130
the photo sending it to our model et cetera et cetera.

201
00:13:08,160 --> 00:13:11,900
So we just set it up so that the user interaction is disabled.

202
00:13:11,970 --> 00:13:16,470
And now we're going to also unhide our spinner and we're going to started animating because when we

203
00:13:16,470 --> 00:13:19,080
tap on the camera view that's basically when everything starts loading.

204
00:13:19,080 --> 00:13:25,740
So go ahead and type self whip's self-taught spinner is hidden because remember we hit it in the interface

205
00:13:25,740 --> 00:13:26,590
builder.

206
00:13:26,850 --> 00:13:28,450
That's going to be equal to false.

207
00:13:28,620 --> 00:13:35,280
And then we're going to go ahead and type self that spinner don't start animating.

208
00:13:35,280 --> 00:13:39,620
That's right because that's going to start at actually doing its spin animation.

209
00:13:40,060 --> 00:13:43,890
OK so cool so our camera views disabled our spinner is animating.

210
00:13:44,100 --> 00:13:49,950
Now we need to think about when we want to re-enable the camera view and hide the spinner and that is

211
00:13:49,950 --> 00:13:51,230
when it's done speaking.

212
00:13:51,300 --> 00:13:51,960
OK.

213
00:13:52,200 --> 00:13:59,010
So we already added this delegate method did finish utterance and that is used to determine when the

214
00:13:59,040 --> 00:14:01,470
speech synthesizer is finished talking.

215
00:14:01,470 --> 00:14:03,000
So that's super easy.

216
00:14:03,000 --> 00:14:05,850
All we need to do is basically do the opposite of what we just did.

217
00:14:05,850 --> 00:14:11,550
So self camera view is user interaction enabled is true.

218
00:14:11,610 --> 00:14:13,520
Now it can be tapped again.

219
00:14:13,950 --> 00:14:19,960
Let's go ahead and call self-caused spinner is hidden equals true OK.

220
00:14:20,510 --> 00:14:21,200
That's very cool.

221
00:14:21,200 --> 00:14:23,260
That's all we need to do is to hide our spinner.

222
00:14:23,480 --> 00:14:25,520
Oh you know what we should also stop it from animating

223
00:14:29,350 --> 00:14:30,390
OK.

224
00:14:30,430 --> 00:14:35,690
So now when it's done speaking it's going to go ahead and re-enable the camera view.

225
00:14:35,770 --> 00:14:40,050
It's going to hide the spinner and stop it from animating let's build and run and let's doublecheck

226
00:14:40,150 --> 00:14:40,960
to make sure that works.

227
00:14:40,960 --> 00:14:46,450
This is just the way that we prevent the app from having too much input which could cause crashes that

228
00:14:46,450 --> 00:14:51,700
could cause memory issues and there's really no need to scan 100 things like right at once.

229
00:14:51,700 --> 00:14:57,190
So let's let's tap the screen and you'll hear the camera shutter sound and when I tap on the screen

230
00:14:57,190 --> 00:14:59,740
you shouldn't hear it again until it's done.

231
00:14:59,740 --> 00:15:03,280
We should also see the spin or show up although I see right now that it's not actually hidden.

232
00:15:03,280 --> 00:15:04,380
So we're going to need to fix that.

233
00:15:04,390 --> 00:15:08,760
But let's try it again tapping the screen.

234
00:15:08,760 --> 00:15:10,680
Nothing's happening.

235
00:15:11,100 --> 00:15:12,370
OK it's done it head.

236
00:15:12,390 --> 00:15:14,150
When I tap it again.

237
00:15:14,850 --> 00:15:18,100
Ok cool.

238
00:15:18,480 --> 00:15:18,990
Very cool.

239
00:15:18,990 --> 00:15:19,950
So that works.

240
00:15:19,970 --> 00:15:26,710
But let's go let's go determine why it's not hidden from the get go.

241
00:15:26,760 --> 00:15:31,750
Maybe I put the wrong thing in the camera view is hidden.

242
00:15:31,780 --> 00:15:36,220
Oh did tap camera view is hidden is supposed to.

243
00:15:36,360 --> 00:15:38,890
Oh wait no it's supposed to show when I tap the camera view.

244
00:15:40,240 --> 00:15:41,600
Is hidden it's true.

245
00:15:42,600 --> 00:15:45,810
And let's go to the main story board I did hide that right.

246
00:15:46,840 --> 00:15:47,200
OK.

247
00:15:47,250 --> 00:15:49,880
Yeah it says it's hidden.

248
00:15:50,460 --> 00:15:54,030
Well I guess you know what let's go let's go hide it in code.

249
00:15:54,120 --> 00:15:58,840
Sometimes you can't rely on Interface Builder So let's go ahead and type spinner that is hidden.

250
00:15:59,010 --> 00:16:00,130
And let's set that to true.

251
00:16:00,150 --> 00:16:01,330
Let's build it again.

252
00:16:01,440 --> 00:16:05,790
Let's make sure that the spinner is actually hidden when we first load the app there's no use in having

253
00:16:05,790 --> 00:16:07,800
a spinner doing nothing.

254
00:16:07,920 --> 00:16:09,540
It's kind of confusing actually.

255
00:16:09,540 --> 00:16:10,260
OK good.

256
00:16:10,260 --> 00:16:10,920
So it's gone.

257
00:16:10,920 --> 00:16:13,420
Let's go ahead and tap the screen.

258
00:16:13,680 --> 00:16:17,510
Let's tap tap tap tap tap tap tap nothing.

259
00:16:18,800 --> 00:16:19,390
Cool.

260
00:16:19,610 --> 00:16:26,230
So when it's done I was able to tap into it again.

261
00:16:27,850 --> 00:16:28,260
OK.

262
00:16:28,310 --> 00:16:30,410
Pretty confident yourself there Siri.

263
00:16:30,500 --> 00:16:36,380
Anyway awesome so we just added some code to make sure that too much input is not getting in to our

264
00:16:36,380 --> 00:16:36,810
app.

265
00:16:36,980 --> 00:16:38,470
But guys this is incredible.

266
00:16:38,480 --> 00:16:39,320
Our app is done.

267
00:16:39,320 --> 00:16:45,510
We've just built an app using machine learning that uses a pre-trained model to identify objects.

268
00:16:45,740 --> 00:16:51,110
Show what they are on the screen and speak to us what they are it's pretty amazing if you think about

269
00:16:51,110 --> 00:16:53,090
the technology that this is utilizing.

270
00:16:53,090 --> 00:16:55,760
Thank you guys so much for going through this section of the course.

271
00:16:55,760 --> 00:16:59,640
I hope this is what your appetite for core M-L and all the things it can do.

272
00:16:59,780 --> 00:17:03,030
There are so many ways you could extend this app to make it more amazing.

273
00:17:03,230 --> 00:17:08,930
You could use this as a way to tag and classify photos to make different albums you could use this as

274
00:17:08,930 --> 00:17:11,090
a way to catalog some of your stuff.

275
00:17:11,090 --> 00:17:17,230
I have a remote control I have some sunglasses I have this thing you can use it to catalog your stuff.

276
00:17:17,240 --> 00:17:21,950
There are lots of different ways that you could extend this app to make it more amazing.

277
00:17:21,950 --> 00:17:25,130
Now this is just one core M-L model squeezed net.

278
00:17:25,160 --> 00:17:26,340
The one that we're using.

279
00:17:26,480 --> 00:17:27,320
There are other ones.

280
00:17:27,320 --> 00:17:35,360
There's one a one from one called Places 2 0 5 Google net I think and it's utilized to identify scenes

281
00:17:35,360 --> 00:17:39,460
and places to tell you what kind of a senior at are you in a city or are you at the beach or are you

282
00:17:39,470 --> 00:17:40,550
in the forest.

283
00:17:40,550 --> 00:17:46,220
That's just another cool type of Corum that you can use the most amazing thing is all of this is happening

284
00:17:46,310 --> 00:17:47,090
on your device.

285
00:17:47,090 --> 00:17:50,410
Locally we don't even need to reach out to an API or a server.

286
00:17:50,480 --> 00:17:52,120
So so cool.

287
00:17:52,370 --> 00:17:53,990
Thank you guys so much great work.

288
00:17:53,990 --> 00:17:56,210
And let's head over to the next section of this course.
